source: codes/icosagcm/trunk/src/caldyn.f90 @ 186

Last change on this file since 186 was 186, checked in by ymipsl, 10 years ago

Add new openMP parallelism based on distribution of domains on threads. There is no more limitation of number of threads by MPI process.

YM

File size: 1.9 KB
RevLine 
[17]1MODULE caldyn_mod
[19]2  USE icosa
[157]3  USE caldyn_gcm_mod, ONLY : caldyn_BC
[17]4  PRIVATE
5  CHARACTER(LEN=255),SAVE :: caldyn_type
[186]6!$OMP THREADPRIVATE(caldyn_type)
[17]7 
[157]8  PUBLIC init_caldyn, caldyn, caldyn_BC
[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       
31     
32  END SUBROUTINE init_caldyn
33 
[159]34  SUBROUTINE caldyn(write_out,f_phis, f_ps, f_mass, f_theta_rhodz, f_u, f_q, &
[162]35       f_hflux, f_wflux, f_dps, f_dmass, f_dtheta_rhodz, f_du)
[19]36  USE icosa
[17]37  USE caldyn_gcm_mod, ONLY : caldyn_gcm=>caldyn
38  USE caldyn_adv_mod, ONLY : caldyn_adv=>caldyn
39  IMPLICIT NONE
[129]40  LOGICAL,INTENT(IN)    :: write_out
[17]41  TYPE(t_field),POINTER :: f_phis(:)
42  TYPE(t_field),POINTER :: f_ps(:)
[159]43  TYPE(t_field),POINTER :: f_mass(:)
[17]44  TYPE(t_field),POINTER :: f_theta_rhodz(:)
45  TYPE(t_field),POINTER :: f_u(:)
[110]46  TYPE(t_field),POINTER :: f_q(:)
[134]47  TYPE(t_field),POINTER :: f_hflux(:)
48  TYPE(t_field),POINTER :: f_wflux(:)
[17]49  TYPE(t_field),POINTER :: f_dps(:)
[162]50  TYPE(t_field),POINTER :: f_dmass(:)
[17]51  TYPE(t_field),POINTER :: f_dtheta_rhodz(:)
52  TYPE(t_field),POINTER :: f_du(:)
53
54    SELECT CASE (TRIM(caldyn_type))
55      CASE('gcm')
[159]56        CALL caldyn_gcm(write_out,f_phis, f_ps, f_mass, f_theta_rhodz, f_u, f_q, &
[162]57             f_hflux, f_wflux, f_dps, f_dmass, f_dtheta_rhodz, f_du)
[139]58      CASE('adv')
59        CALL caldyn_adv(write_out,f_phis, f_ps, f_theta_rhodz, f_u, f_q, &
60             f_hflux, f_wflux, f_dps, f_dtheta_rhodz, f_du)
[17]61    END SELECT
62 
63  END SUBROUTINE caldyn 
64
65END MODULE caldyn_mod
Note: See TracBrowser for help on using the repository browser.