c********************************************************************* SUBROUTINE f_logf(f,df,logf,dlogf) c routine public du module mod_numerique c si en entrée f > 0 : détermination de log_10(f) et de dlog_10(f) c sinon : détermination de f et de df c entrées/sorties optionnelles c f, df: variable, écart c logf, dlogf : log_10(variable), écart en dex c Auteur: P. Morel, Laboratoire Lagange, O.C.A., CESAM2k c---------------------------------------------------------------------- USE mod_kind IMPLICIT NONE REAL (kind=dp), INTENT(inout) :: f, df, logf, dlogf REAL (kind=dp), SAVE :: ln10 LOGICAL, SAVE :: init=.TRUE. c---------------------------------------------------------------------- IF(init)THEN init=.FALSE. ; ln10=LOG(10.d0) ENDIF IF(f > 0.d0)THEN logf=LOG10(f) ; dlogf=df/f/ln10 ELSE f=10.d0**logf ; df=dlogf*ln10*f ENDIF RETURN END SUBROUTINE f_logf