Neat. I was not aware of this. Blaise
> On Sep 1, 2016, at 9:26 PM, Jeff Hammond <jeff.scie...@gmail.com> wrote: > > https://gcc.gnu.org/onlinedocs/gfortran/ISO_005fFORTRAN_005fENV.htmlhas > real{32,64,128} that does a nice job for this situation. > > Jeff > > Sent from my iPhone > >> On Sep 1, 2016, at 4:15 PM, Blaise A Bourdin <bour...@lsu.edu> wrote: >> >> Hi, >> >> 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. >> >> >> 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. >> >> ! The following ensures that mef90 and PETSC real types are compatible: >> ! thanks to Michael Metcalf in comp.lang.fortran >> PetscReal,Parameter :: PReal = 1.0 >> Integer,Parameter,Public :: Kr = >> Selected_Real_Kind(Precision(PReal)) >> >> PetscInt,Parameter :: PInt = 1 >> Integer,Parameter,Public :: Ki = Selected_Int_Kind(PInt) >> >> PetscLogDouble,Parameter :: flop = 1.0 >> Integer,Parameter,Public :: PFlop = >> Selected_Real_Kind(Precision(flop)) >> >> so that Real(Kind = Kr) is the same as PetscReal, and literals can be >> written 1.234_Kr or 23_flop. >> >> I guess PETSc could define them in the petsc module and inherited from "use >> petsc”. >> >> Blaise >> >> >> >>> On Sep 1, 2016, at 5:37 PM, Barry Smith <bsm...@mcs.anl.gov> wrote: >>> >>> >>>> On Sep 1, 2016, at 5:28 PM, Munson, Todd <tmun...@mcs.anl.gov> wrote: >>>> >>>> >>>> Which platforms do not define PETSC_USE_FORTRANKIND? >>> >>> It uses it everywhere the Fortran compiler supports it. >>> >>> # reverse of the above - but more standard thing to do for F90 compilers >>> def checkFortranKind(self): >>> '''Checks whether selected_int_kind etc work USE_FORTRANKIND''' >>> self.pushLanguage('FC') >>> body = ''' >>> integer(kind=selected_int_kind(10)) i >>> real(kind=selected_real_kind(10)) d >>> ''' >>> if self.checkCompile('', body): >>> self.addDefine('USE_FORTRANKIND', 1) >>> self.popLanguage() >>> return >>> >>> 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. >>> >>> >>> >>> >>>> Are they important >>>> or can we drop support for them? >>>> >>>> I could probably hack the D or Q for the others, but it would probably >>>> be ugly. >>>> >>>> Or I could just overrule my OCD today... >>>> >>>> Todd. >>>> >>>>> On Sep 1, 2016, at 5:08 PM, Barry Smith <bsm...@mcs.anl.gov> wrote: >>>>> >>>>> >>>>>> On Sep 1, 2016, at 4:37 PM, Munson, Todd <tmun...@mcs.anl.gov> wrote: >>>>>> >>>>>> >>>>>> Cool! >>>>>> >>>>>> For what its worth, that only works when PETSC_USE_FORTRANKIND is true. >>>>>> I'm not sure how many of the Petsc builds have this flag set. >>>>> >>>>> in the other case could you try to tack on the D or Q business? >>>>> >>>>> Barry >>>>> >>>>>> >>>>>> Any idea how to do the same thing in C? >>>>>> >>>>>> Todd. >>>>>> >>>>>>> On Sep 1, 2016, at 4:13 PM, Lisandro Dalcin <dalc...@gmail.com> wrote: >>>>>>> >>>>>>> >>>>>>> On 1 September 2016 at 23:05, Barry Smith <bsm...@mcs.anl.gov> wrote: >>>>>>> I didn't have a solution to this >>>>>>> >>>>>>> ! These lines should be added to >>>>>>> $PETSC_DIR/include/petsc/finclude/petscsysdef.h >>>>>>> #if defined(PETSC_USE_REAL_SINGLE) >>>>>>> integer, parameter :: PETSC_REAL_KIND = selected_real_kind(5) >>>>>>> #elif defined(PETSC_USE_REAL_DOUBLE) >>>>>>> integer, parameter :: PETSC_REAL_KIND = selected_real_kind(10) >>>>>>> #elif defined(PETSC_USE_REAL___FLOAT128) >>>>>>> integer, parameter :: PETSC_REAL_KIND = selected_real_kind(20) >>>>>>> #endif >>>>>>> >>>>>>> ! User code should write literals this way >>>>>>> PetscReal x >>>>>>> x = 0.123456789123456789123456789_PETSC_REAL_KIND >>>>>>> >>>>>>> >>>>>>> >>>>>>> -- >>>>>>> Lisandro Dalcin >>>>>>> ============ >>>>>>> Research Scientist >>>>>>> Computer, Electrical and Mathematical Sciences & Engineering (CEMSE) >>>>>>> Extreme Computing Research Center (ECRC) >>>>>>> King Abdullah University of Science and Technology (KAUST) >>>>>>> http://ecrc.kaust.edu.sa/ >>>>>>> >>>>>>> 4700 King Abdullah University of Science and Technology >>>>>>> al-Khawarizmi Bldg (Bldg 1), Office # 0109 >>>>>>> Thuwal 23955-6900, Kingdom of Saudi Arabia >>>>>>> http://www.kaust.edu.sa >>>>>>> >>>>>>> Office Phone: +966 12 808-0459 >> >> -- >> Department of Mathematics and Center for Computation & Technology >> Louisiana State University, Baton Rouge, LA 70803, USA >> Tel. +1 (225) 578 1612, Fax +1 (225) 578 4276 >> http://www.math.lsu.edu/~bourdin >> >> >> >> >> >> >> -- Department of Mathematics and Center for Computation & Technology Louisiana State University, Baton Rouge, LA 70803, USA Tel. +1 (225) 578 1612, Fax +1 (225) 578 4276 http://www.math.lsu.edu/~bourdin