source: codes/icosagcm/devel/src/dynamics/caldyn.f90 @ 562

Last change on this file since 562 was 562, checked in by dubos, 7 years ago

devel : per-kernel activation of macro-generated code

File size: 2.6 KB
RevLine 
[17]1MODULE 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 
10CONTAINS
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
88END MODULE caldyn_mod
Note: See TracBrowser for help on using the repository browser.