c************************************************************************** SUBROUTINE tdetau(tau,teff,grav,t,dtsdtau,dtsdteff,dtsdg, 1 ro_ext,dro_grav,dro_teff,f_tau,df_tau,d2f_tau) C c routine générique pour le calcul des lois t(tau) c il y a des appels différents suivant suivant nom_tdetau c Appel à k5777 en cas de sortie de table pour roger et marcs C c routine public du module mod_atm C c Auteur: P.Morel, Département J.D. Cassini, O.C.A., CESAM2k C c entrées : c tau : profondeur optique Rosseland c teff : température effective c grav : gravité c c sorties : c t : température c dtsd* : dérivées t/ tau, teff, grav c dtsd* : dérivées t/ tau, teff, grav c dro_** : dérivées ro_ext/ teff, grav c f_tau, df_tau, df_tau2 : f, d f / d tau, d2 f / d2 tau C c-------------------------------------------------------------------- C USE mod_donnees, only : langue, nom_conv, nom_tdetau USE mod_kind C IMPLICIT NONE C REAL (kind=dp), INTENT(in) :: tau, teff, grav REAL (kind=dp), INTENT(out) :: t, dtsdtau, dtsdteff, dtsdg, 1 ro_ext, dro_grav, dro_teff, f_tau, df_tau, d2f_tau LOGICAL, SAVE :: init=.TRUE. CHARACTER(len=5) :: nom_reduit c----------------------------------------------------------------------- IF(init)THEN init=.FALSE. c si lois de MARCS IF(INDEX(nom_tdetau,"MARCS") /= 0 )THEN SELECT CASE(langue) CASE('english') WRITE(*,1001) 1001 FORMAT('The data for the MARCS''s T(tau) laws are available',/, 1 'from Bernard.Pichon@oca.eu') CASE DEFAULT WRITE(*,1) 1 FORMAT('Les données des lois T(tau) de MARCS sont disponibles',/, 1 'sur demande auprès de Bernard.Pichon@oca.eu') END SELECT c si lois de L.Piau ELSEIF(INDEX(nom_tdetau,"piau") /= 0 )THEN c PRINT*,'Lois T(tau) de L.Piau en attente de validation, ARRET' ; STOP SELECT CASE(langue) CASE('english') WRITE(*,1002) 1002 FORMAT('The data for the L.Piau''s T(tau) laws are available',/, 1 'from laurent.piau@cea.fr') CASE DEFAULT WRITE(*,2) 2 FORMAT('Les données des lois T(tau) de L.Piau sont disponibles',/, 1 'sur demande auprès, laurent.piau@cea.fr') END SELECT c la routine de convection doit être conv_cgm_reza IF(INDEX(nom_conv,"cgm") == 0)THEN SELECT CASE(langue) CASE('english') WRITE(*,1003) 1003 FORMAT('WARNING****',/, 1 'lois T(tau) piau1/3 use for convection conv_cgm_reza',/) CASE DEFAULT WRITE(*,3) 3 FORMAT('ATTENTION****',/, 1 'lois T(tau) piau1/4 utiliser pour la convection conv_cgm_reza',/) END SELECT ENDIF ENDIF ENDIF c les différentes T(tau) nom_reduit = nom_tdetau(1:5) SELECT CASE(nom_reduit) CASE ('eddin') CALL edding(tau,teff,t,dtsdtau,dtsdteff,dtsdg, 1 ro_ext,dro_grav,dro_teff,f_tau,df_tau,d2f_tau) CASE ('hopf ') CALL hopf(tau,teff,t,dtsdtau,dtsdteff,dtsdg, 1 ro_ext,dro_grav,dro_teff,f_tau,df_tau,d2f_tau) CASE ('hsra ') CALL hsra(tau,teff,t,dtsdtau,dtsdteff,dtsdg, 1 ro_ext,dro_grav,dro_teff,f_tau,df_tau,d2f_tau) CASE ('k5750') CALL k5750(tau,teff,t,dtsdtau,dtsdteff,dtsdg, 1 ro_ext,dro_grav,dro_teff,f_tau,df_tau,d2f_tau) CASE ('k5777') CALL k5777(tau,teff,t,dtsdtau,dtsdteff,dtsdg, 1 ro_ext,dro_grav,dro_teff,f_tau,df_tau,d2f_tau) CASE ('MARCS') CALL marcs(tau,teff,grav,t,dtsdtau,dtsdteff,dtsdg, 1 ro_ext,dro_grav,dro_teff,f_tau,df_tau,d2f_tau) CASE ('piau1') IF(teff > 6400.d0)THEN CALL hopf(tau,teff,t,dtsdtau,dtsdteff,dtsdg, 1 ro_ext,dro_grav,dro_teff,f_tau,df_tau,d2f_tau) ELSE CALL AT1PopIas59tdetau(tau,teff,grav,t,dtsdtau,dtsdteff,dtsdg, 1 ro_ext,dro_grav,dro_teff,f_tau,df_tau,d2f_tau) ENDIF CASE ('piau3') IF(teff > 6400.d0)THEN CALL hopf(tau,teff,t,dtsdtau,dtsdteff,dtsdg, 1 ro_ext,dro_grav,dro_teff,f_tau,df_tau,d2f_tau) ELSE CALL AT3PopIas59tdetau(tau,teff,grav,t,dtsdtau,dtsdteff,dtsdg, 1 ro_ext,dro_grav,dro_teff,f_tau,df_tau,d2f_tau) ENDIF CASE ('piau4') CALL tdetau_piau(tau,teff,t,dtsdtau,dtsdteff,dtsdg, 1 ro_ext,dro_grav,dro_teff,f_tau,df_tau,d2f_tau) CASE ('roger') CALL roger(tau,teff,grav,t,dtsdtau,dtsdteff,dtsdg, 1 ro_ext,dro_grav,dro_teff,f_tau,df_tau,d2f_tau) CASE DEFAULT PRINT*,'routine de loi T(tau) inconnue: ',nom_tdetau PRINT*,'routines connues: edding, hopf, hsra, k5750, k5777' PRINT*,'roger****, MARCS****, piau1, piau3, piau4' PRINT*,'arrêt' ; STOP END SELECT RETURN END SUBROUTINE tdetau