<?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 It is only recently that the in Intel® Fortran Compiler</title>
    <link>https://community.intel.com/t5/Intel-Fortran-Compiler/Is-OpenMP-not-supporting-Fortran-2003-PASS-Finalization-etc/m-p/1034167#M111424</link>
    <description>&lt;P&gt;It is only recently that the OpenMP standard admitted to anything newer than Fortran 90. As I mentioned, not all of the F2003 features have defined behavior when combined with OpenMP. That doesn't mean you can't use them, but some aspects may not work properly in a parallel region. If you run into issues, please provide us with a test case and we'll be glad to take a look to see if we can make it work in our compiler, even though OpenMP doesn't define the behavior.&lt;/P&gt;</description>
    <pubDate>Thu, 11 Jun 2015 20:24:07 GMT</pubDate>
    <dc:creator>Steven_L_Intel1</dc:creator>
    <dc:date>2015-06-11T20:24:07Z</dc:date>
    <item>
      <title>Is OpenMP not supporting Fortran 2003 (PASS, Finalization, etc.)</title>
      <link>https://community.intel.com/t5/Intel-Fortran-Compiler/Is-OpenMP-not-supporting-Fortran-2003-PASS-Finalization-etc/m-p/1034161#M111418</link>
      <description>&lt;P&gt;Hi all,&lt;/P&gt;

&lt;P&gt;My question is related to integration of OpenMP in Fortran with some features in standard 2003/2008&lt;/P&gt;

&lt;P&gt;In the document of latest 4.0 release it is stated that some features are not supported. The problem is : such features are in my opinion very important for new Object-Oriented paradigm as introduced in new standards.&lt;/P&gt;

&lt;P&gt;I made some simple code containing type extension and pass atribute. The OpenMP work and a get &amp;nbsp;speedup of 12x. ( on 12 cores !!!)&amp;nbsp;&lt;/P&gt;

&lt;P&gt;But in other complex cases ( with multiple classes and procedures pointers) I got unexpected access violation in runtime.&lt;/P&gt;

&lt;P&gt;Before I investigate more, is any one had similar errors with OepnMP in context of OOP paradigm of Fortran 2003/2008.&lt;/P&gt;

&lt;P&gt;Thanks&lt;/P&gt;

&lt;P&gt;P.S. Here is the part of text related to my post, see for details the link:&amp;nbsp;&lt;SPAN style="font-size: 13.0080003738403px; line-height: 19.5120010375977px;"&gt;&lt;A href="http://www.openmp.org/mp-documents/OpenMP4.0.0.pdf" target="_blank"&gt;http://www.openmp.org/mp-documents/OpenMP4.0.0.pdf&lt;/A&gt;&lt;/SPAN&gt;&lt;/P&gt;

&lt;P&gt;!==========================================================================================&lt;/P&gt;

&lt;P&gt;ISO/&lt;SPAN style="font-size: 1em; line-height: 1.5;"&gt;IEC 1539-1:2004, Information Technology - Programming Languages - Fortran. &lt;/SPAN&gt;&lt;/P&gt;

&lt;P&gt;&lt;SPAN style="font-size: 1em; line-height: 1.5;"&gt;This OpenMP API specification refers to ISO/IEC 1539-1:2004 as Fortran 2003. The following features are not supported:&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;

&lt;P&gt;• IEEE Arithmetic issues covered in Fortran 2003 Section 14&lt;/P&gt;

&lt;P&gt;• Allocatable enhancement • Parameterized derived types&lt;/P&gt;

&lt;P&gt;• Finalization&lt;/P&gt;

&lt;P&gt;• Procedures bound by name to a type&lt;/P&gt;

&lt;P&gt;• The PASS attribute&amp;nbsp;&lt;/P&gt;

&lt;P&gt;• Procedures bound to a type as operators&lt;/P&gt;

&lt;P&gt;• Type extension&lt;/P&gt;

&lt;P&gt;• Overriding a type-bound procedure&lt;/P&gt;

&lt;P&gt;• Polymorphic entities&lt;/P&gt;

&lt;P&gt;• SELECT TYPE construct&lt;/P&gt;

&lt;P&gt;• Deferred bindings and abstract types&lt;/P&gt;

&lt;P&gt;• Controlling IEEE underflow&lt;/P&gt;

&lt;P&gt;• Another IEEE class value&lt;/P&gt;

&lt;P&gt;Where this OpenMP API specification refers to C, C++ or Fortran, reference is made to the base language supported by the implementation&lt;/P&gt;

&lt;P&gt;!============================================================================================================&lt;/P&gt;</description>
      <pubDate>Wed, 10 Jun 2015 13:07:25 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Fortran-Compiler/Is-OpenMP-not-supporting-Fortran-2003-PASS-Finalization-etc/m-p/1034161#M111418</guid>
      <dc:creator>CFM</dc:creator>
      <dc:date>2015-06-10T13:07:25Z</dc:date>
    </item>
    <item>
      <title>I'm afraid you're asking in</title>
      <link>https://community.intel.com/t5/Intel-Fortran-Compiler/Is-OpenMP-not-supporting-Fortran-2003-PASS-Finalization-etc/m-p/1034162#M111419</link>
      <description>&lt;P&gt;I'm afraid you're asking in the wrong place. This forum is specifically for discussion of aspects of theOopenMP runtime implementation, not which language features the OpenMP compiler supports. To attract the Intel Fortran compiler folk, please ask again at&amp;nbsp;https://software.intel.com/en-us/forums/intel-fortran-compiler-for-linux-and-mac-os-x (though some of your queries may not even be for them since you seem to be asking about the OpenMP standard itself, not the Intel implementation. If that's so you should be asking in one of the forums at&amp;nbsp;http://openmp.org/forum/ )&lt;/P&gt;</description>
      <pubDate>Wed, 10 Jun 2015 13:18:31 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Fortran-Compiler/Is-OpenMP-not-supporting-Fortran-2003-PASS-Finalization-etc/m-p/1034162#M111419</guid>
      <dc:creator>James_C_Intel2</dc:creator>
      <dc:date>2015-06-10T13:18:31Z</dc:date>
    </item>
    <item>
      <title>Thank you James!</title>
      <link>https://community.intel.com/t5/Intel-Fortran-Compiler/Is-OpenMP-not-supporting-Fortran-2003-PASS-Finalization-etc/m-p/1034163#M111420</link>
      <description>&lt;P&gt;Thank you James!&lt;/P&gt;

&lt;P&gt;I will moved wy post there.&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 10 Jun 2015 13:37:00 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Fortran-Compiler/Is-OpenMP-not-supporting-Fortran-2003-PASS-Finalization-etc/m-p/1034163#M111420</guid>
      <dc:creator>CFM</dc:creator>
      <dc:date>2015-06-10T13:37:00Z</dc:date>
    </item>
    <item>
      <title>In this connection, ifort</title>
      <link>https://community.intel.com/t5/Intel-Fortran-Compiler/Is-OpenMP-not-supporting-Fortran-2003-PASS-Finalization-etc/m-p/1034164#M111421</link>
      <description>&lt;P&gt;In this connection, ifort documents the requirement to set /fp:strict for full implementation of IEEE Arithmetic, although some features don't depend on that (they don't tell you which).&amp;nbsp; As your reference indicates, capabilities such as floating point exception handling aren't compatible with vectorization or parallelization.&amp;nbsp; Those don't appear to be your primary interest, however.&lt;/P&gt;

&lt;P&gt;It would be unusual, in my opinion, to require /fp:strict when using OpenMP.&amp;nbsp; In some cases, OpenMP performance might be less than optimized single thread.&amp;nbsp; You might have to divide your source files into those which use the strict features but not OpenMP and vice versa.&lt;/P&gt;

&lt;P&gt;If you could make specific working examples of features which don't have evident reasons for problems with parallelization, you might be able to get it investigated,&amp;nbsp; OpenMP does lag seriously in support of newer language features, even some which are 2 decades old.&amp;nbsp; Some problems might be due simply to the lack of a requirement for testing for them.&lt;/P&gt;

&lt;P&gt;People who aren't known to the regulars at openmp.org are likely to have their posts ignored; to a lesser extent, stackoverflow has some of that as well, but those are the forums for asking about OpenMP features independent of specific compilers.&amp;nbsp; If you found something which works with gfortran but not with ifort, that would give more reason for making an ifort problem report at premier.intel.com.&lt;/P&gt;

&lt;P&gt;If you found something in the open source code OpenMP which relates to your question, the forum where you started (or the one associated with the source code) might be suitable for asking about it.&amp;nbsp; James apparently assumed you were interested in linux, as the open source works better there.&amp;nbsp; With gfortran on Windows, I think you must work with the libgomp source provided with gfortran.&lt;/P&gt;</description>
      <pubDate>Wed, 10 Jun 2015 14:49:15 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Fortran-Compiler/Is-OpenMP-not-supporting-Fortran-2003-PASS-Finalization-etc/m-p/1034164#M111421</guid>
      <dc:creator>TimP</dc:creator>
      <dc:date>2015-06-10T14:49:15Z</dc:date>
    </item>
    <item>
      <title>The general issue is that the</title>
      <link>https://community.intel.com/t5/Intel-Fortran-Compiler/Is-OpenMP-not-supporting-Fortran-2003-PASS-Finalization-etc/m-p/1034165#M111422</link>
      <description>&lt;P&gt;The general issue is that the OpenMP standard hasn't defined behavior for some of the newer language features. I wasn't aware of issues with the IEEE intrinsic modules, but it may be related to exception processing, which may not work properly in a threaded environment across all implementations. I don't recall hearing of any issues with our implementation, though.&lt;/P&gt;

&lt;P&gt;Things such as finalization and anything that triggers "hidden" procedure calls may not be well-defined in a parallel region. Note, though, that just because OpenMP doesn't define the behavior, that doesn't mean it won't work. We'd be interested in test cases that fail.&lt;/P&gt;</description>
      <pubDate>Wed, 10 Jun 2015 15:13:54 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Fortran-Compiler/Is-OpenMP-not-supporting-Fortran-2003-PASS-Finalization-etc/m-p/1034165#M111422</guid>
      <dc:creator>Steven_L_Intel1</dc:creator>
      <dc:date>2015-06-10T15:13:54Z</dc:date>
    </item>
    <item>
      <title>Hi Steve, Hi all,</title>
      <link>https://community.intel.com/t5/Intel-Fortran-Compiler/Is-OpenMP-not-supporting-Fortran-2003-PASS-Finalization-etc/m-p/1034166#M111423</link>
      <description>&lt;P&gt;Hi Steve, Hi all,&lt;/P&gt;

&lt;P&gt;&lt;SPAN style="font-size: 1em; line-height: 1.5;"&gt;The complex program was not running in parallel because some variables had SAVE attributes. In parallel mode, this generated run time errors.&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;

&lt;P&gt;Still, I am confused of the text I mentionned " The features of FORTRAN 2003 not being supported by OepnMP 4....". I will&amp;nbsp;&lt;SPAN style="font-size: 1em; line-height: 1.5;"&gt;ask to the OpenMP team.&lt;/SPAN&gt;&lt;/P&gt;

&lt;P&gt;BTW, I attached a simplified file where&amp;nbsp;&lt;SPAN style="font-size: 13.0080003738403px; line-height: 19.5120010375977px;"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="font-size: 13.0080003738403px; line-height: 19.5120010375977px;"&gt;few&lt;/SPAN&gt;&lt;SPAN style="font-size: 1em; line-height: 1.5;"&gt;&amp;nbsp;FORTRAN 2003 features in question are used : PASS &amp;nbsp;ATTRIBUTE , TYPE EXTENSION , &amp;nbsp;FINALIZATION. The code runs well with nice speedup using OpenMP.&lt;/SPAN&gt;&lt;/P&gt;

&lt;P&gt;Chuma&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp;! &amp;nbsp;test_OpenMP_pass_attributes.f90&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; !&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; ! &amp;nbsp;FUNCTIONS:&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; ! &amp;nbsp;test_OpenMP_pass_attributes. - Entry point of console application.&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; !&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp; !****************************************************************************&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; !&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; ! &amp;nbsp;PROGRAM: test_OpenMP_pass_attributes.&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; !&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; ! &amp;nbsp;PURPOSE: &amp;nbsp;Entry point for the console application.&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; !&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; !****************************************************************************&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; module abstr_class_module&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; IMPLICIT NONE&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; public abstr_class&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; type, abstract :: abstr_class&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; INTEGER &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;:: ID &amp;nbsp;&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; INTEGER &amp;nbsp;, ALLOCATABLE :: data_array(:)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; contains&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp; procedure(construc_interface) &amp;nbsp;, deferred, &amp;nbsp;pass :: constructor&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; procedure(method_interface) &amp;nbsp; &amp;nbsp;, deferred, &amp;nbsp;pass :: method&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp; endtype &amp;nbsp;abstr_class&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp; interface&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp; subroutine construc_interface(this, size_data_array)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; import abstr_class&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; class(abstr_class) &amp;nbsp;:: this&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; integer ,intent(in) :: size_data_array&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; endsubroutine construc_interface&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp; subroutine method_interface(this, trunc_data)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; import abstr_class&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; class(abstr_class) &amp;nbsp;:: this&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; integer ,intent(in) :: trunc_data&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; endsubroutine method_interface&lt;/P&gt;

&lt;P&gt;&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; end interface&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp; contains&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp; endmodule abstr_class_module&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; !------------------------------------------------------------------&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; !------------------------------------------------------------------&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; module ext_from_abstr_class_module&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; use abstr_class_module&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp; public ext_class&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp; type, extends(abstr_class) :: ext_class&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;procedure(ptr_method_interface), &amp;amp;&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;pass, pointer :: ptr_method =&amp;gt; NULL()&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp; contains&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp; procedure, pass :: &amp;nbsp;constructor&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; procedure, pass :: &amp;nbsp;method&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; procedure, pass :: &amp;nbsp;method_invoking_procedure_ptr&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp; final :: clean_and_free&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp; endtype &amp;nbsp;ext_class&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; interface&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; subroutine ptr_method_interface(this, trunc_data)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; import ext_class&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; class(ext_class) &amp;nbsp; &amp;nbsp;:: this&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; integer ,intent(in) :: trunc_data&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; endsubroutine ptr_method_interface&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp; end interface&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp; contains&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; !------------------------------------------------------------------&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; subroutine constructor(this,size_data_array )&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; class(ext_class) this&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; integer, intent(in) :: &amp;nbsp;size_data_array&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp; allocate (this%data_array(size_data_array))! allocate data&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; this%ptr_method =&amp;gt; &amp;nbsp;method &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ! associate proc pointer &amp;nbsp;&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp; endsubroutine constructor&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; !------------------------------------------------------------------&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; subroutine method(this, trunc_data)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; class(ext_class) &amp;nbsp; :: this &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ! this calling obj&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; integer, intent(in):: trunc_data &amp;nbsp; &amp;nbsp; &amp;nbsp; ! some INT to truncate data&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp; integer &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;:: n_data , ido&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp; !select type(this) &amp;nbsp;! not necessary , coherence of type extension&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; !class is(ext_class)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; n_data = size(this%data_array, 1)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; this%data_array = 0&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; do ido = 1, n_data&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; this%data_array (ido) = this%data_array (ido) + trunc_data&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; call dummy_operations(); &amp;nbsp; ! to increase loading for each thread&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; enddo&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; !endselect&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp; endsubroutine method &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp;!------------------------------------------------------------------&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; subroutine method_invoking_procedure_ptr(this, trunc_data)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; class(ext_class) &amp;nbsp; :: this&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; integer, intent(in):: trunc_data&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; CALL this%ptr_method(trunc_data)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; endsubroutine method_invoking_procedure_ptr&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp;!------------------------------------------------------------------&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; subroutine dummy_operations &amp;nbsp;! just to increase processor loading&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; REAL(8), ALLOCATABLE, DIMENSION (:,:) :: arr_int&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; INTEGER size_dummy_array, i1 , i2&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; REAL(8) :: INIT_REAL&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp; INIT_REAL = 3.3&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; size_dummy_array = 100&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp; ALLOCATE(arr_int(size_dummy_array,size_dummy_array))&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp; arr_int(1,:) = (/(i2, i2=1,size_dummy_array)/)&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp; DO i1 = 2, size_dummy_array&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; arr_int(i1,:) = &amp;nbsp;(/(i2, i2=1,size_dummy_array)/)*(INIT_REAL) &amp;amp;&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - arr_int(i1-1,:)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; ENDDO&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp; DO i1 = 2, size_dummy_array&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; arr_int = arr_int * arr_int&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; arr_int = arr_int / arr_int&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; enddo&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; DEALLOCATE(arr_int)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; endsubroutine dummy_operations&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; !------------------------------------------------------------------&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; subroutine clean_and_free (this)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; type(ext_class) :: this&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp; deallocate(this%data_array)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; NULLIFY (this%ptr_method )&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp; endsubroutine clean_and_free&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp; endmodule ext_from_abstr_class_module&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; !------------------------------------------------------------------&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; !------------------------------------------------------------------&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; program test_OpenMP_pass_attributes&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp; use abstr_class_module&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; use ext_from_abstr_class_module&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp; implicit none&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp; type &amp;nbsp;enc_abstr_class&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; class(abstr_class), &amp;amp;&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pointer :: p =&amp;gt; null()!will point to extended class&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; endtype&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; ! Variables&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; class(abstr_class), pointer :: abs_to_ext =&amp;gt; null()&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; type(enc_abstr_class), allocatable :: arr_obj (:)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; integer imemo , ib&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; integer size_all_objs , size_data_array&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp; size_all_objs = 1500 !3000&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; size_data_array = 10 !&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; allocate (arr_obj(size_all_objs))&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp; !$OMP PARALLEL SHARED(arr_obj, size_all_objs)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; !$OMP DO SCHEDULE(DYNAMIC,1) PRIVATE(abs_to_ext,ib)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; do ib = 1, size_all_objs&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; allocate(ext_class::arr_obj(ib)%p)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; enddo&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; !$OMP END DO NOWAIT&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; !$OMP END PARALLEL&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp; !$OMP PARALLEL SHARED(arr_obj, size_all_objs)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; !$OMP DO SCHEDULE(DYNAMIC,1) PRIVATE(abs_to_ext,ib)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; do ib = 1, size_all_objs&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; abs_to_ext=&amp;gt;arr_obj(ib)%p&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; CALL &amp;nbsp;abs_to_ext%constructor(size_data_array)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; enddo&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; !$OMP END DO NOWAIT&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; !$OMP END PARALLEL&lt;/P&gt;

&lt;P&gt;&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; !$OMP PARALLEL SHARED(arr_obj, size_all_objs)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; !$OMP DO SCHEDULE(DYNAMIC,1) PRIVATE(abs_to_ext,ib)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; do ib = 1, size_all_objs&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; abs_to_ext=&amp;gt;arr_obj(ib)%p&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; CALL &amp;nbsp;abs_to_ext%method(ib)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; enddo&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; !$OMP END DO NOWAIT&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; !$OMP END PARALLEL&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp; !VERIFY OPERATION DONE BY CALLING METHOD(), TO TEST OpenMP functions:&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; !ib is equal to abs_to_ext%data_array(1)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; do ib = 1, size_all_objs&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; abs_to_ext=&amp;gt;arr_obj(ib)%p&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; IF ( ANY( abs_to_ext%data_array(:)-ib /= 0 )) THEN&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print *, 'error detected: method() not properly performed'&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; STOP&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ENDIF&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print *, ib , '-th block tested : = ', abs_to_ext%data_array(1)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; enddo&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; print *, 'all data have been correctly set'&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; nullify(abs_to_ext)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; !verify usage of procedure pointer in OpenMP parallelized DO loop&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; !$OMP PARALLEL SHARED(arr_obj, size_all_objs)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; !$OMP DO SCHEDULE(DYNAMIC,1) PRIVATE(abs_to_ext,ib)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; do ib = 1, size_all_objs&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; abs_to_ext=&amp;gt;arr_obj(ib)%p&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; !CALL &amp;nbsp;abs_to_ext%method(ib)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; !CALL &amp;nbsp;abs_to_ext%ptr_method(ib) ! error: not on abstract class&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; select type(abs_to_ext) &amp;nbsp;&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; class is(ext_class)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; CALL abs_to_ext%ptr_method(ib) != method(), see constructor()&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; endselect&lt;BR /&gt;
	&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; enddo&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; !$OMP END DO NOWAIT&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; !$OMP END PARALLEL&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp; !deallocate using finalization&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; !$OMP PARALLEL SHARED(arr_obj, size_all_objs)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; !$OMP DO SCHEDULE(DYNAMIC,1) PRIVATE(abs_to_ext,ib)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; do ib = 1, size_all_objs&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; abs_to_ext=&amp;gt;arr_obj(ib)%p&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; DEALLOCATE(abs_to_ext)&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; enddo&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; !$OMP END DO NOWAIT&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; !$OMP END PARALLEL&lt;/P&gt;

&lt;P&gt;&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; end program test_OpenMP_pass_attributes &amp;nbsp;!&lt;/P&gt;</description>
      <pubDate>Thu, 11 Jun 2015 17:57:25 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Fortran-Compiler/Is-OpenMP-not-supporting-Fortran-2003-PASS-Finalization-etc/m-p/1034166#M111423</guid>
      <dc:creator>CFM</dc:creator>
      <dc:date>2015-06-11T17:57:25Z</dc:date>
    </item>
    <item>
      <title>It is only recently that the</title>
      <link>https://community.intel.com/t5/Intel-Fortran-Compiler/Is-OpenMP-not-supporting-Fortran-2003-PASS-Finalization-etc/m-p/1034167#M111424</link>
      <description>&lt;P&gt;It is only recently that the OpenMP standard admitted to anything newer than Fortran 90. As I mentioned, not all of the F2003 features have defined behavior when combined with OpenMP. That doesn't mean you can't use them, but some aspects may not work properly in a parallel region. If you run into issues, please provide us with a test case and we'll be glad to take a look to see if we can make it work in our compiler, even though OpenMP doesn't define the behavior.&lt;/P&gt;</description>
      <pubDate>Thu, 11 Jun 2015 20:24:07 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Fortran-Compiler/Is-OpenMP-not-supporting-Fortran-2003-PASS-Finalization-etc/m-p/1034167#M111424</guid>
      <dc:creator>Steven_L_Intel1</dc:creator>
      <dc:date>2015-06-11T20:24:07Z</dc:date>
    </item>
    <item>
      <title>Many thanks. I will let you</title>
      <link>https://community.intel.com/t5/Intel-Fortran-Compiler/Is-OpenMP-not-supporting-Fortran-2003-PASS-Finalization-etc/m-p/1034168#M111425</link>
      <description>&lt;P&gt;Many thanks. I will let you know.&lt;/P&gt;</description>
      <pubDate>Thu, 11 Jun 2015 20:30:20 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Fortran-Compiler/Is-OpenMP-not-supporting-Fortran-2003-PASS-Finalization-etc/m-p/1034168#M111425</guid>
      <dc:creator>CFM</dc:creator>
      <dc:date>2015-06-11T20:30:20Z</dc:date>
    </item>
  </channel>
</rss>

