[207] | 1 | MODULE earth_const |
---|
| 2 | USE prec |
---|
| 3 | USE math_const |
---|
| 4 | |
---|
| 5 | REAL(rstd),SAVE :: radius=6.37122E6 |
---|
| 6 | REAL(rstd),SAVE :: g=9.80616 |
---|
| 7 | REAL(rstd),PARAMETER :: daysec=86400 |
---|
| 8 | REAL(rstd),SAVE :: omega=7.292E-5 |
---|
| 9 | REAL(rstd),SAVE :: kappa=0.2857143 |
---|
| 10 | REAL(rstd),SAVE :: cpp=1004.70885 |
---|
[404] | 11 | REAL(rstd),SAVE :: cppv=1860. |
---|
[401] | 12 | REAL(rstd),SAVE :: Rv=461.5 |
---|
| 13 | REAL(rstd),SAVE :: Treff=273. |
---|
[207] | 14 | REAL(rstd),SAVE :: preff=101325. |
---|
| 15 | REAL(rstd),SAVE :: pa=50000. |
---|
[266] | 16 | REAL(rstd),SAVE :: scale_height=8000. ! atmospheric scale height (m) |
---|
[207] | 17 | REAL(rstd),SAVE :: scale_factor=1. |
---|
[266] | 18 | REAL(rstd),SAVE :: gas_constant = 8.3144621 |
---|
| 19 | REAL(rstd),SAVE :: mu ! molar mass of the atmosphere |
---|
[207] | 20 | |
---|
[553] | 21 | INTEGER, PARAMETER,PUBLIC :: thermo_none=-99, thermo_theta=1, thermo_entropy=2, & |
---|
| 22 | thermo_moist=3, thermo_boussinesq=4, thermo_dry=10, thermo_fake_moist=11, thermo_moist_debug=100 |
---|
[406] | 23 | INTEGER, PUBLIC :: caldyn_thermo, physics_thermo |
---|
[401] | 24 | !$OMP THREADPRIVATE(caldyn_thermo) |
---|
[406] | 25 | !$OMP THREADPRIVATE(physics_thermo) |
---|
[401] | 26 | |
---|
[366] | 27 | LOGICAL, SAVE :: boussinesq, hydrostatic |
---|
[553] | 28 | !$OMP THREADPRIVATE(boussinesq) |
---|
| 29 | !$OMP THREADPRIVATE(hydrostatic) |
---|
[580] | 30 | LOGICAL :: dysl, dysl_geopot, dysl_pvort_only, dysl_caldyn_fast, dysl_caldyn_coriolis, dysl_slow_hydro |
---|
| 31 | !$OMP THREADPRIVATE(dysl, dysl_geopot, dysl_pvort_only, dysl_caldyn_fast, dysl_caldyn_coriolis, dysl_slow_hydro) |
---|
[207] | 32 | |
---|
| 33 | CONTAINS |
---|
| 34 | |
---|
| 35 | SUBROUTINE init_earth_const |
---|
| 36 | USE getin_mod |
---|
| 37 | IMPLICIT NONE |
---|
| 38 | REAL(rstd) :: X=1 |
---|
| 39 | |
---|
| 40 | CALL getin("radius",radius) |
---|
| 41 | CALL getin("g",g) |
---|
| 42 | CALL getin("scale_factor",scale_factor) |
---|
| 43 | CALL getin("omega",omega) |
---|
| 44 | CALL getin("kappa",kappa) |
---|
| 45 | CALL getin("cpp",cpp) |
---|
[404] | 46 | CALL getin("cppv",cppv) |
---|
| 47 | CALL getin("Rv",Rv) |
---|
[207] | 48 | CALL getin("preff",preff) |
---|
[401] | 49 | CALL getin("Treff",Treff) |
---|
[266] | 50 | CALL getin("scale_height",scale_height) |
---|
[207] | 51 | |
---|
| 52 | boussinesq=.FALSE. |
---|
| 53 | CALL getin("boussinesq",boussinesq) |
---|
[553] | 54 | PRINT *, "Note : key boussinesq is deprecated, use thermo=boussinesq instead" |
---|
| 55 | IF(boussinesq) STOP |
---|
[366] | 56 | hydrostatic=.TRUE. |
---|
| 57 | CALL getin("hydrostatic",hydrostatic) |
---|
| 58 | IF(boussinesq .AND. .NOT. hydrostatic) THEN |
---|
| 59 | PRINT *, 'boussinesq=.TRUE. and hydrostatic=.FALSE. : Non-hydrostatic boussinesq equations are not supported' |
---|
| 60 | STOP |
---|
| 61 | END IF |
---|
[207] | 62 | |
---|
[366] | 63 | mu=kappa/cpp |
---|
[207] | 64 | radius=radius/scale_factor |
---|
| 65 | omega=omega*scale_factor |
---|
| 66 | |
---|
| 67 | END SUBROUTINE init_earth_const |
---|
| 68 | |
---|
| 69 | |
---|
| 70 | END MODULE earth_const |
---|