c***************************************************************** SUBROUTINE rltgm(r,dr,l,dl,t,dt,lg,dlg,m,dm,icase) c determination de deux quantites nulles a partir des autres c Exemple si r=0 et l=0, determination de r et l a partir de t, g, m c les ecarts dr, dl, dt, dg, dm sont optionnels c le cas t=l=0 est impossible c entrees (2 d'entre elles sont des sorties) c r, dr: R/Rsol, ecart type c l, dl: L/Lsol, ecart type c t, dt: Teff, ecart type c lg, dlg: Log10 g, ecart type c m, dm: M/Msol, ecart type c Auteur: P. Morel, Departement J.D. Cassini, O.C.A. c----------------------------------------------------------------------- USE mod_donnees, ONLY: g, init_ctes_phys, ln10, lsol, msol, pi, 1 rsol, sigma USE mod_kind IMPLICIT NONE INTEGER, INTENT(in) :: icase REAL (kind=dp), INTENT(inout) :: r, dr, l, dl , t, dt , lg, 1 dlg , m, dm REAL (kind=dp), SAVE :: ln_grav, ln_4pis, ln_msol, ln_rsol, 1 ln_lsol REAL (kind=dp) :: ln_r, ln_l, ln_t, ln_g, ln_m, dln_r, dln_l, 1 dln_t, dln_g, dln_m LOGICAL, SAVE :: init=.TRUE. c---------------------------------------------------------------------- 2000 FORMAT(8e10.3) IF(init)THEN init=.FALSE. ; CALL init_ctes_phys ln_grav=LOG(g) ln_4pis=LOG(4.d0*pi*sigma) ln_msol=LOG(msol) ln_rsol=LOG(rsol) ln_lsol=LOG(lsol) ENDIF SELECT CASE(icase) CASE(1) !T, LOG g, M/Msol ==> R/Rsol et L/Lsol ln_t=LOG(t) ; dln_t=dt/t ln_g=lg*ln10 ; dln_g=dlg*ln10 ln_m=LOG(m)+ln_msol; dln_m=dm/m ln_r=(ln_grav+ln_m-ln_g)/2.d0 r=EXP(ln_r-ln_rsol) dln_r=SQRT(dln_m**2+dln_g**2)/2.d0 dr=r*dln_r ln_l=ln_4pis+2.d0*ln_r+4.d0*ln_t l=EXP(ln_l-ln_lsol) dln_l=2.d0*SQRT(dln_r**2+4.d0*dln_t**2) dl=l*dln_l CASE(2) !L/Lsol, LOG g, M/Msol ==> R/Rsol et T ln_l=LOG(l)+ln_lsol ; dln_l=dl/l ln_g=lg*ln10 ; dln_g=dlg*ln10 ln_m=LOG(m)+ln_msol; dln_m=dm/m ln_r=(ln_grav+ln_m-ln_g)/2.d0 r=EXP(ln_r-ln_rsol) dln_r=SQRT(dln_m**2+dln_g**2)/2.d0 dr=r*dln_r ln_t=(ln_l-ln_4pis-2.d0*ln_r)/4.d0 t=EXP(ln_t) dln_t=SQRT(dln_l**2+4.d0*dln_r**2)/4.d0 dt=t*dln_t CASE(3) !T, L/Lsol, M/Msol ==> R/Rsol et LOG g ln_t=LOG(t) ; dln_t=dt/t ln_l=LOG(l)+ln_lsol ; dln_l=dl/l ln_m=LOG(m)+ln_msol; dln_m=dm/m ln_r=(ln_l-ln_4pis-4.d0*ln_t)/2.d0 r=EXP(ln_r-ln_rsol) dln_r=SQRT(dln_l**2+16.d0*dln_t**2)/2.d0 dr=r*dln_r ln_g=ln_grav+ln_m-2.d0*ln_r dln_g=SQRT(dln_m**2+4.d0*dln_r**2) lg=ln_g/ln10 dlg=dln_g/ln10 CASE(4) !T, L/Lsol, LOG g ==> R/Rsol et M/Msol ln_t=LOG(t) ; dln_t=dt/t ln_l=LOG(l)+ln_lsol ; dln_l=dl/l ln_g=lg*ln10 ; dln_g=dlg*ln10 ln_r=(ln_l-ln_4pis-4.d0*ln_t)/2.d0 r=EXP(ln_r-ln_rsol) dln_r=SQRT(dln_l**2+16.d0*dln_t**2)/2.d0 dr=r*dln_r ln_m=ln_g-ln_grav+2.d0*ln_r m=EXP(ln_m-ln_msol) dln_m=SQRT(dln_g**2+4.d0*dln_r**2) dm=m*dln_m CASE(6) !R/Rsol, T, M/Msol ==> L/Lsol et LOG g ln_r=LOG(r)+ln_rsol ; dln_r=dr/r ln_t=LOG(t) ; dln_t=dt/t ln_m=LOG(m)+ln_msol; dln_m=dm/m ln_l=ln_4pis+2.d0*ln_r+4.d0*ln_t l=EXP(ln_l-ln_lsol) dln_l=2.d0*SQRT(dln_r**2+4.d0*dln_t**2) dl=l*dln_l ln_g=ln_grav+ln_m-2.d0*ln_r dln_g=SQRT(dln_m**2+4.d0*dln_r**2) lg=ln_g/ln10 dlg=dln_g/ln10 CASE(7) !R/Rsol, T , LOG g ==> L/Lsol et M/Msol ln_r=LOG(r)+ln_rsol ; dln_r=dr/r ln_t=LOG(t) ; dln_t=dt/t ln_g=lg*ln10 ; dln_g=dlg*ln10 ln_l=ln_4pis+2.d0*ln_r+4.d0*ln_t l=EXP(ln_l-ln_lsol) dln_l=2.d0*SQRT(dln_r**2+4.d0*dln_t**2) dl=l*dln_l ln_m=ln_g-ln_grav+2.d0*ln_r m=EXP(ln_m-ln_msol) dln_m=SQRT(dln_g**2+4.d0*dln_r**2) dm=m*dln_m CASE(8) !R/Rsol, L/Lsol, M/Msol ==> T et LOG g ln_r=LOG(r)+ln_rsol ; dln_r=dr/r ln_l=LOG(l)+ln_lsol ; dln_l=dl/l ln_m=LOG(m)+ln_msol; dln_m=dm/m ln_t=(ln_l-ln_4pis-2.d0*ln_r)/4.d0 t=EXP(ln_t) dln_t=SQRT(dln_l**2+4.d0*dln_r**2)/4.d0 dt=t*dln_t ln_g=ln_grav+ln_m-2.d0*ln_r dln_g=SQRT(dln_m**2+4.d0*dln_r**2) lg=ln_g/ln10 dlg=dln_g/ln10 CASE(9) !R/Rsol, L/Lsol, LOG g ==> T et M/Msol ln_r=LOG(r)+ln_rsol ; dln_r=dr/r ln_l=LOG(l)+ln_lsol ; dln_l=dl/l ln_g=lg*ln10 ; dln_g=dlg*ln10 ln_t=(ln_l-ln_4pis-2.d0*ln_r)/4.d0 t=EXP(ln_t) dln_t=SQRT(dln_l**2+4.d0*dln_r**2)/4.d0 dt=t*dln_t ln_g=ln_grav+ln_m-2.d0*ln_r dln_g=SQRT(dln_m**2+4.d0*dln_r**2) lg=ln_g/ln10 dlg=dln_g/ln10 CASE DEFAULT WRITE(*,"('erreur, icase=',i4)")icase END SELECT RETURN END SUBROUTINE rltgm