c***************************************************************** SUBROUTINE l_teff_m_lg(l,dl,teff,dteff,m,dm,lg,dlg) c routine PUBLIC du module mod_spectroscopie c si l > 0 en entrée : c détermination de log g à partir de l, teff et M/Msol (+écarts) c sinon : c détermination de l à partir de log g, teff et M/Msol (+écarts) c entrées : c teff, dteff : température effective en °K, écart c m, dm : masse en Msol, écart c entrées/sorties optionnelles : c l, dl : luminosité en Lsol, écart c lg, dlg : log g, écart c Auteur: P. Morel, Laboratoire Lagrange, O.C.A., CESAM2k c----------------------------------------------------------------------- USE mod_donnees, ONLY : aradia, clight, g, init_ctes_phys, 1 lsol, msol, pi USE mod_kind USE mod_numerique, ONLY : f_logf IMPLICIT NONE REAL (kind=dp), INTENT(in) :: teff, dteff, m, dm REAL (kind=dp), INTENT(inout) :: l, dl, lg, dlg REAL (kind=dp), SAVE :: cte REAL (kind=dp) :: log_teff, dlog_teff, log_m, dlog_m, log_l, 1 dlog_l, te, dte, mb, dmb LOGICAL, SAVE :: init=.TRUE. CHARACTER (len=1) :: oui c---------------------------------------------------------------------- 2000 FORMAT(8es10.3) IF(init)THEN init=.FALSE. c initialisation des constantes de physique CALL init_ctes_phys cte=LOG10(pi*g*aradia*clight*msol/lsol) ENDIF c------------initialisations fin---------------------------- IF(teff <= 0.d0 .OR. m <= 0.d0)THEN PRINT*,'erreur dans appel a l_teff_m_lg, m<=0 ou teff<=0' WRITE(6,"('m=',es10.3,' Teff=',es10.3)")teff,m PRINT*,'Arret' STOP ELSE te=teff ; dte=dteff ; mb=m ; dmb=dm CALL f_logf(te,dte,log_teff,dlog_teff) CALL f_logf(mb,dmb,log_m,dlog_m) ENDIF c WRITE(*,2000)te,dte,log_teff,dlog_teff c WRITE(*,2000)mb,dmb,log_m,dlog_m IF(l > 0.d0)THEN!log g a partir de l, teff et M/Msol (+ ecarts) CALL f_logf(l,dl,log_l,dlog_l) lg=cte+log_m+4.d0*log_teff-log_l dlg=sqrt(dlog_m**2+16.d0*dlog_teff**2+dlog_l**2) ELSE !l a partir de log g, teff et M/Msol (+ ecarts) log_l=cte+log_m+4.d0*log_teff-lg dlog_l=sqrt(dlog_m**2+16.d0*dlog_teff**2+dlg**2) l=-1.d0 CALL f_logf(l,dl,log_l,dlog_l) !l=-1 pour passer du log l a l ENDIF c WRITE(*,2000)l,dl,log_l,dlog_l ; PAUSE RETURN END SUBROUTINE l_teff_m_lg