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
Line 
1MODULE caldyn_mod
2  USE icosa
3  USE caldyn_gcm_mod, ONLY : caldyn_BC
4  PRIVATE
5  CHARACTER(LEN=255),SAVE :: caldyn_type
6!$OMP THREADPRIVATE(caldyn_type)
7 
8  PUBLIC init_caldyn, caldyn, caldyn_BC
9 
10CONTAINS
11
12  SUBROUTINE init_caldyn
13  USE icosa
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')
23        CALL init_caldyn_gcm
24      CASE('adv')
25        CALL init_caldyn_adv
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 
34  SUBROUTINE caldyn(write_out,f_phis, f_ps, f_mass, f_theta_rhodz, f_u, f_q, &
35       f_hflux, f_wflux, f_dps, f_dmass, f_dtheta_rhodz, f_du)
36  USE icosa
37  USE caldyn_gcm_mod, ONLY : caldyn_gcm=>caldyn
38  USE caldyn_adv_mod, ONLY : caldyn_adv=>caldyn
39  IMPLICIT NONE
40  LOGICAL,INTENT(IN)    :: write_out
41  TYPE(t_field),POINTER :: f_phis(:)
42  TYPE(t_field),POINTER :: f_ps(:)
43  TYPE(t_field),POINTER :: f_mass(:)
44  TYPE(t_field),POINTER :: f_theta_rhodz(:)
45  TYPE(t_field),POINTER :: f_u(:)
46  TYPE(t_field),POINTER :: f_q(:)
47  TYPE(t_field),POINTER :: f_hflux(:)
48  TYPE(t_field),POINTER :: f_wflux(:)
49  TYPE(t_field),POINTER :: f_dps(:)
50  TYPE(t_field),POINTER :: f_dmass(:)
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')
56        CALL caldyn_gcm(write_out,f_phis, f_ps, f_mass, f_theta_rhodz, f_u, f_q, &
57             f_hflux, f_wflux, f_dps, f_dmass, f_dtheta_rhodz, f_du)
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)
61    END SELECT
62 
63  END SUBROUTINE caldyn 
64
65END MODULE caldyn_mod
Note: See TracBrowser for help on using the repository browser.