[17] | 1 | MODULE caldyn_mod |
---|
[19] | 2 | USE icosa |
---|
[17] | 3 | PRIVATE |
---|
[562] | 4 | SAVE |
---|
[17] | 5 | CHARACTER(LEN=255),SAVE :: caldyn_type |
---|
[186] | 6 | !$OMP THREADPRIVATE(caldyn_type) |
---|
[562] | 7 | |
---|
| 8 | PUBLIC init_caldyn, caldyn, caldyn_BC, dysl |
---|
[17] | 9 | |
---|
| 10 | CONTAINS |
---|
| 11 | |
---|
[98] | 12 | SUBROUTINE init_caldyn |
---|
[19] | 13 | USE icosa |
---|
[17] | 14 | USE caldyn_gcm_mod, ONLY : init_caldyn_gcm=>init_caldyn |
---|
| 15 | USE caldyn_adv_mod, ONLY : init_caldyn_adv=>init_caldyn |
---|
| 16 | IMPLICIT NONE |
---|
| 17 | |
---|
| 18 | caldyn_type="gcm" |
---|
| 19 | CALL getin('caldyn',caldyn_type) |
---|
| 20 | |
---|
| 21 | SELECT CASE (TRIM(caldyn_type)) |
---|
| 22 | CASE('gcm') |
---|
[98] | 23 | CALL init_caldyn_gcm |
---|
[139] | 24 | CASE('adv') |
---|
| 25 | CALL init_caldyn_adv |
---|
[17] | 26 | CASE DEFAULT |
---|
| 27 | PRINT*,'Bad selector for variable caldyn : <', TRIM(caldyn_type),'> options are <gcm>, <adv>' |
---|
| 28 | STOP |
---|
| 29 | END SELECT |
---|
| 30 | |
---|
[562] | 31 | dysl=.FALSE. |
---|
| 32 | CALL getin("dysl",dysl) |
---|
| 33 | dysl_geopot=dysl |
---|
| 34 | CALL getin("dysl_geopot",dysl_geopot) |
---|
| 35 | dysl_caldyn_fast=dysl |
---|
| 36 | CALL getin("dysl_caldyn_fast",dysl_caldyn_fast) |
---|
| 37 | dysl_slow_hydro=dysl |
---|
| 38 | CALL getin("dysl_slow_hydro",dysl_slow_hydro) |
---|
| 39 | dysl_pvort_only=dysl |
---|
| 40 | CALL getin("dysl_pvort_only",dysl_pvort_only) |
---|
| 41 | dysl_caldyn_coriolis=dysl |
---|
| 42 | CALL getin("dysl_caldyn_coriolis",dysl_caldyn_coriolis) |
---|
| 43 | |
---|
[17] | 44 | END SUBROUTINE init_caldyn |
---|
[251] | 45 | |
---|
[350] | 46 | SUBROUTINE caldyn_BC(f_phis, f_geopot, f_wflux) |
---|
[251] | 47 | USE caldyn_gcm_mod, ONLY : caldyn_gcm_BC=>caldyn_BC |
---|
| 48 | IMPLICIT NONE |
---|
[350] | 49 | TYPE(t_field), POINTER :: f_phis(:), f_geopot(:), f_wflux(:) |
---|
[251] | 50 | SELECT CASE (TRIM(caldyn_type)) |
---|
| 51 | CASE('gcm') |
---|
[350] | 52 | CALL caldyn_gcm_BC(f_phis, f_geopot, f_wflux) |
---|
[251] | 53 | END SELECT |
---|
| 54 | END SUBROUTINE caldyn_BC |
---|
[17] | 55 | |
---|
[159] | 56 | SUBROUTINE caldyn(write_out,f_phis, f_ps, f_mass, f_theta_rhodz, f_u, f_q, & |
---|
[350] | 57 | f_geopot, f_hflux, f_wflux, f_dps, f_dmass, f_dtheta_rhodz, f_du) |
---|
[19] | 58 | USE icosa |
---|
[17] | 59 | USE caldyn_gcm_mod, ONLY : caldyn_gcm=>caldyn |
---|
| 60 | USE caldyn_adv_mod, ONLY : caldyn_adv=>caldyn |
---|
| 61 | IMPLICIT NONE |
---|
[129] | 62 | LOGICAL,INTENT(IN) :: write_out |
---|
[17] | 63 | TYPE(t_field),POINTER :: f_phis(:) |
---|
| 64 | TYPE(t_field),POINTER :: f_ps(:) |
---|
[159] | 65 | TYPE(t_field),POINTER :: f_mass(:) |
---|
[17] | 66 | TYPE(t_field),POINTER :: f_theta_rhodz(:) |
---|
| 67 | TYPE(t_field),POINTER :: f_u(:) |
---|
[110] | 68 | TYPE(t_field),POINTER :: f_q(:) |
---|
[350] | 69 | TYPE(t_field),POINTER :: f_geopot(:) |
---|
[134] | 70 | TYPE(t_field),POINTER :: f_hflux(:) |
---|
| 71 | TYPE(t_field),POINTER :: f_wflux(:) |
---|
[360] | 72 | TYPE(t_field) :: f_dps(:) |
---|
| 73 | TYPE(t_field) :: f_dmass(:) |
---|
| 74 | TYPE(t_field) :: f_dtheta_rhodz(:) |
---|
| 75 | TYPE(t_field) :: f_du(:) |
---|
[17] | 76 | |
---|
| 77 | SELECT CASE (TRIM(caldyn_type)) |
---|
| 78 | CASE('gcm') |
---|
[159] | 79 | CALL caldyn_gcm(write_out,f_phis, f_ps, f_mass, f_theta_rhodz, f_u, f_q, & |
---|
[350] | 80 | f_geopot, f_hflux, f_wflux, f_dps, f_dmass, f_dtheta_rhodz, f_du) |
---|
[139] | 81 | CASE('adv') |
---|
| 82 | CALL caldyn_adv(write_out,f_phis, f_ps, f_theta_rhodz, f_u, f_q, & |
---|
| 83 | f_hflux, f_wflux, f_dps, f_dtheta_rhodz, f_du) |
---|
[17] | 84 | END SELECT |
---|
| 85 | |
---|
[360] | 86 | END SUBROUTINE caldyn |
---|
[17] | 87 | |
---|
| 88 | END MODULE caldyn_mod |
---|