It's Fortran 2008 but I don't know any respectable compiler that doesn't support it. It works with Intel, GCC and Cray. Probably IBM XLF too, but I've not tested. Not sure about any others. I think it's possible to emulate it if necessary. <span></span><div><br></div><div>Jeff</div><div><br>On Thursday, September 1, 2016, Blaise A Bourdin <<a href="mailto:bourdin@lsu.edu">bourdin@lsu.edu</a>> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Neat.<br>
I was not aware of this.<br>
<br>
Blaise<br>
<br>
> On Sep 1, 2016, at 9:26 PM, Jeff Hammond <<a href="javascript:;" onclick="_e(event, 'cvml', 'jeff.science@gmail.com')">jeff.science@gmail.com</a>> wrote:<br>
><br>
> <a href="https://gcc.gnu.org/onlinedocs/gfortran/ISO_005fFORTRAN_005fENV.htmlhas" target="_blank">https://gcc.gnu.org/<wbr>onlinedocs/gfortran/ISO_<wbr>005fFORTRAN_005fENV.htmlhas</a> real{32,64,128} that does a nice job for this situation.<br>
><br>
> Jeff<br>
><br>
> Sent from my iPhone<br>
><br>
>> On Sep 1, 2016, at 4:15 PM, Blaise A Bourdin <<a href="javascript:;" onclick="_e(event, 'cvml', 'bourdin@lsu.edu')">bourdin@lsu.edu</a>> wrote:<br>
>><br>
>> Hi,<br>
>><br>
>> If I recall correctly, fortran does not mandate that "selected_real_kind(5)" means the same across compilers, so that hardcoding kind values may not be portable.<br>
>><br>
>><br>
>> Instead, I would recommend the following (not my idea, it was proposed by Michael Metcalf in comp.lang.fortran a _long_ time ago) in a top-level module.<br>
>><br>
>>  ! The following ensures that mef90 and PETSC real types are compatible:<br>
>>  ! thanks to Michael Metcalf in comp.lang.fortran<br>
>>  PetscReal,Parameter                 :: PReal = 1.0<br>
>>  Integer,Parameter,Public            :: Kr = Selected_Real_Kind(Precision(<wbr>PReal))<br>
>><br>
>>  PetscInt,Parameter                  :: PInt = 1<br>
>>  Integer,Parameter,Public            :: Ki = Selected_Int_Kind(PInt)<br>
>><br>
>>  PetscLogDouble,Parameter            :: flop = 1.0<br>
>>  Integer,Parameter,Public            :: PFlop = Selected_Real_Kind(Precision(<wbr>flop))<br>
>><br>
>> so that Real(Kind = Kr) is the same as PetscReal, and literals can be written 1.234_Kr or 23_flop.<br>
>><br>
>> I guess PETSc could define them in the petsc module and inherited from "use petsc”.<br>
>><br>
>> Blaise<br>
>><br>
>><br>
>><br>
>>> On Sep 1, 2016, at 5:37 PM, Barry Smith <<a href="javascript:;" onclick="_e(event, 'cvml', 'bsmith@mcs.anl.gov')">bsmith@mcs.anl.gov</a>> wrote:<br>
>>><br>
>>><br>
>>>> On Sep 1, 2016, at 5:28 PM, Munson, Todd <<a href="javascript:;" onclick="_e(event, 'cvml', 'tmunson@mcs.anl.gov')">tmunson@mcs.anl.gov</a>> wrote:<br>
>>>><br>
>>>><br>
>>>> Which platforms do not define PETSC_USE_FORTRANKIND?<br>
>>><br>
>>> It uses it everywhere the Fortran compiler supports it.<br>
>>><br>
>>> # reverse of the above - but more standard thing to do for F90 compilers<br>
>>> def checkFortranKind(self):<br>
>>>  '''Checks whether selected_int_kind etc work USE_FORTRANKIND'''<br>
>>>  self.pushLanguage('FC')<br>
>>>  body = '''<br>
>>>      integer(kind=selected_int_<wbr>kind(10)) i<br>
>>>      real(kind=selected_real_kind(<wbr>10)) d<br>
>>> '''<br>
>>>  if self.checkCompile('', body):<br>
>>>    self.addDefine('USE_<wbr>FORTRANKIND', 1)<br>
>>>  self.popLanguage()<br>
>>>  return<br>
>>><br>
>>> Presumably any Fortran compiler that supports F90 supports it so it is not unreasonable for us to just require it and simplify PETSc in a few places.<br>
>>><br>
>>><br>
>>><br>
>>><br>
>>>> Are they important<br>
>>>> or can we drop support for them?<br>
>>>><br>
>>>> I could probably hack the D or Q for the others, but it would probably<br>
>>>> be ugly.<br>
>>>><br>
>>>> Or I could just overrule my OCD today...<br>
>>>><br>
>>>> Todd.<br>
>>>><br>
>>>>> On Sep 1, 2016, at 5:08 PM, Barry Smith <<a href="javascript:;" onclick="_e(event, 'cvml', 'bsmith@mcs.anl.gov')">bsmith@mcs.anl.gov</a>> wrote:<br>
>>>>><br>
>>>>><br>
>>>>>> On Sep 1, 2016, at 4:37 PM, Munson, Todd <<a href="javascript:;" onclick="_e(event, 'cvml', 'tmunson@mcs.anl.gov')">tmunson@mcs.anl.gov</a>> wrote:<br>
>>>>>><br>
>>>>>><br>
>>>>>> Cool!<br>
>>>>>><br>
>>>>>> For what its worth, that only works when PETSC_USE_FORTRANKIND is true.<br>
>>>>>> I'm not sure how many of the Petsc builds have this flag set.<br>
>>>>><br>
>>>>> in the other case could you try to tack on the D or Q business?<br>
>>>>><br>
>>>>> Barry<br>
>>>>><br>
>>>>>><br>
>>>>>> Any idea how to do the same thing in C?<br>
>>>>>><br>
>>>>>> Todd.<br>
>>>>>><br>
>>>>>>> On Sep 1, 2016, at 4:13 PM, Lisandro Dalcin <<a href="javascript:;" onclick="_e(event, 'cvml', 'dalcinl@gmail.com')">dalcinl@gmail.com</a>> wrote:<br>
>>>>>>><br>
>>>>>>><br>
>>>>>>> On 1 September 2016 at 23:05, Barry Smith <<a href="javascript:;" onclick="_e(event, 'cvml', 'bsmith@mcs.anl.gov')">bsmith@mcs.anl.gov</a>> wrote:<br>
>>>>>>> I didn't have a solution to this<br>
>>>>>>><br>
>>>>>>> ! These lines should be added to $PETSC_DIR/include/petsc/<wbr>finclude/petscsysdef.h<br>
>>>>>>> #if defined(PETSC_USE_REAL_SINGLE)<br>
>>>>>>> integer, parameter :: PETSC_REAL_KIND = selected_real_kind(5)<br>
>>>>>>> #elif defined(PETSC_USE_REAL_DOUBLE)<br>
>>>>>>> integer, parameter :: PETSC_REAL_KIND = selected_real_kind(10)<br>
>>>>>>> #elif defined(PETSC_USE_REAL___<wbr>FLOAT128)<br>
>>>>>>> integer, parameter :: PETSC_REAL_KIND = selected_real_kind(20)<br>
>>>>>>> #endif<br>
>>>>>>><br>
>>>>>>> ! User code should write literals this way<br>
>>>>>>> PetscReal x<br>
>>>>>>> x = 0.123456789123456789123456789_<wbr>PETSC_REAL_KIND<br>
>>>>>>><br>
>>>>>>><br>
>>>>>>><br>
>>>>>>> --<br>
>>>>>>> Lisandro Dalcin<br>
>>>>>>> ============<br>
>>>>>>> Research Scientist<br>
>>>>>>> Computer, Electrical and Mathematical Sciences & Engineering (CEMSE)<br>
>>>>>>> Extreme Computing Research Center (ECRC)<br>
>>>>>>> King Abdullah University of Science and Technology (KAUST)<br>
>>>>>>> <a href="http://ecrc.kaust.edu.sa/" target="_blank">http://ecrc.kaust.edu.sa/</a><br>
>>>>>>><br>
>>>>>>> 4700 King Abdullah University of Science and Technology<br>
>>>>>>> al-Khawarizmi Bldg (Bldg 1), Office # 0109<br>
>>>>>>> Thuwal 23955-6900, Kingdom of Saudi Arabia<br>
>>>>>>> <a href="http://www.kaust.edu.sa" target="_blank">http://www.kaust.edu.sa</a><br>
>>>>>>><br>
>>>>>>> Office Phone: +966 12 808-0459<br>
>><br>
>> --<br>
>> Department of Mathematics and Center for Computation & Technology<br>
>> Louisiana State University, Baton Rouge, LA 70803, USA<br>
>> Tel. +1 (225) 578 1612, Fax  +1 (225) 578 4276 <a href="http://www.math.lsu.edu/~bourdin" target="_blank">http://www.math.lsu.edu/~<wbr>bourdin</a><br>
>><br>
>><br>
>><br>
>><br>
>><br>
>><br>
>><br>
<br>
--<br>
Department of Mathematics and Center for Computation & Technology<br>
Louisiana State University, Baton Rouge, LA 70803, USA<br>
Tel. +1 (225) 578 1612, Fax  +1 (225) 578 4276 <a href="http://www.math.lsu.edu/~bourdin" target="_blank">http://www.math.lsu.edu/~<wbr>bourdin</a><br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
</blockquote></div><br><br>-- <br>Jeff Hammond<br><a href="mailto:jeff.science@gmail.com" target="_blank">jeff.science@gmail.com</a><br><a href="http://jeffhammond.github.io/" target="_blank">http://jeffhammond.github.io/</a><br>