source: codes/icosagcm/trunk/src/etat0_start_file.f90 @ 483

Last change on this file since 483 was 483, checked in by ymipsl, 8 years ago
  • Add functionnality to input/output field of type U (value on the edges)
  • Management of start/restart files by XIOS

YM

File size: 2.8 KB
Line 
1MODULE etat0_start_file_mod
2
3
4
5
6CONTAINS
7 
8  SUBROUTINE init_etat0
9  USE xios_mod
10  USE omp_para
11  IMPLICIT NONE
12   
13    IF (is_omp_master) THEN
14      IF (using_xios) CALL xios_set_file_attr("start", enabled=.TRUE.)
15    ENDIF
16   
17  END SUBROUTINE init_etat0 
18 
19  SUBROUTINE etat0(f_ps,f_phis,f_theta_rhodz,f_u, f_q)
20  USE icosa
21  USE restart_mod
22  USE wind_mod
23  USE write_field_mod
24  USE time_mod
25  USE transfert_mod
26  USE omp_para
27  IMPLICIT NONE
28    TYPE(t_field),POINTER :: f_ps(:)
29    TYPE(t_field),POINTER :: f_phis(:)
30    TYPE(t_field),POINTER :: f_theta_rhodz(:)
31    TYPE(t_field),POINTER :: f_u(:)
32    TYPE(t_field),POINTER :: f_q(:)
33 
34    TYPE(t_field),POINTER,SAVE :: f_ulon(:)
35    TYPE(t_field),POINTER,SAVE :: f_ulat(:)
36    TYPE(t_field),POINTER,SAVE :: f_theta_rhodz_1d(:)
37    REAL(rstd), POINTER :: theta_rhodz(:,:,:),theta_rhodz_1d(:,:)
38
39    LOGICAL :: etat0_start_file_colocated=.FALSE.
40    INTEGER :: ind
41
42      CALL getin("etat0_start_file_colocated",etat0_start_file_colocated) 
43      CALL allocate_field(f_theta_rhodz_1d,field_t,type_real,llm,name='theta_rhodz')
44
45
46      IF (.NOT. etat0_start_file_colocated) THEN   
47        CALL allocate_field(f_ulon,field_t,type_real,llm,name='ulon')
48        CALL allocate_field(f_ulat,field_t,type_real,llm,name='ulat')
49        CALL read_start(itau0,f_ps,f_phis,f_theta_rhodz_1d,f_u, f_q)
50        CALL transfert_request(f_ps,req_i1)
51        CALL transfert_request(f_phis,req_i1)
52        CALL transfert_request(f_theta_rhodz_1d,req_i1)
53        CALL transfert_request(f_q,req_i1)
54        CALL transfert_request(f_u,req_e1_vect)
55        CALL transfert_request(f_u,req_e0_vect)
56        CALL un2ulonlat(f_u,f_ulon,f_ulat)
57
58        CALL deallocate_field(f_ulon)
59        CALL deallocate_field(f_ulat)
60
61      ELSE
62        CALL allocate_field(f_ulon,field_t,type_real,llm,name='ulon')
63        CALL allocate_field(f_ulat,field_t,type_real,llm,name='ulat')
64        CALL read_start(itau0,f_ps,f_phis,f_theta_rhodz_1d,f_ulon,f_ulat, f_q)
65        CALL transfert_request(f_ulat,req_i1)
66        CALL transfert_request(f_ulon,req_i1)
67
68        CALL ulonlat2un(f_ulon,f_ulat,f_u)
69
70        CALL transfert_request(f_ps,req_i1)
71        CALL transfert_request(f_phis,req_i1)
72        CALL transfert_request(f_theta_rhodz_1d,req_i1)
73        CALL transfert_request(f_q,req_i1)
74        CALL transfert_request(f_u,req_e1_vect)
75       
76        CALL deallocate_field(f_ulon)
77        CALL deallocate_field(f_ulat)
78      ENDIF
79
80!$OMP BARRIER   
81    DO ind=1, ndomain
82       IF (.NOT. assigned_domain(ind) .AND. is_omp_level_master) CYCLE
83       theta_rhodz=f_theta_rhodz(ind) ; theta_rhodz_1d=f_theta_rhodz_1d(ind)
84       theta_rhodz(:,:,1)=theta_rhodz_1d(:,:)
85    ENDDO
86!$OMP BARRIER   
87
88      CALL bcast(itau0)
89      CALL getin("etat0_start_iteration",itau0)       
90
91  END SUBROUTINE etat0
92 
93 
94END MODULE etat0_start_file_mod
Note: See TracBrowser for help on using the repository browser.