source: codes/icosagcm/trunk/src/initial/etat0_start_file.f90

Last change on this file was 819, checked in by ymipsl, 5 years ago

New parameter in run .def

etat0_start_iteration_reset = y/n default (n)

Reset the start iteration value read in start.nc to 0

YM

File size: 3.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  USE time_mod
12  USE restart_mod
13  IMPLICIT NONE
14   
15    IF (is_omp_master) THEN
16      IF (using_xios) THEN
17        CALL xios_set_file_attr("start", enabled=.TRUE., mode="read", output_freq=(itaumax+1)*xios_timestep)
18      ENDIF
19    ENDIF
20    write_start=.FALSE.
21   
22  END SUBROUTINE init_etat0 
23 
24  SUBROUTINE etat0(f_ps,f_phis,f_theta_rhodz,f_u, f_q)
25  USE icosa
26  USE restart_mod
27  USE wind_mod
28  USE write_field_mod
29  USE time_mod
30  USE transfert_mod
31  USE omp_para
32  USE checksum_mod
33  IMPLICIT NONE
34    TYPE(t_field),POINTER :: f_ps(:)
35    TYPE(t_field),POINTER :: f_phis(:)
36    TYPE(t_field),POINTER :: f_theta_rhodz(:)
37    TYPE(t_field),POINTER :: f_u(:)
38    TYPE(t_field),POINTER :: f_q(:)
39 
40    TYPE(t_field),POINTER,SAVE :: f_ulon(:)
41    TYPE(t_field),POINTER,SAVE :: f_ulat(:)
42    TYPE(t_field),POINTER,SAVE :: f_theta_rhodz_1d(:)
43    REAL(rstd), POINTER :: theta_rhodz(:,:,:),theta_rhodz_1d(:,:)
44
45    LOGICAL :: etat0_start_file_colocated=.FALSE.
46    INTEGER :: ind
47    LOGICAL :: raz
48
49      CALL getin("etat0_start_file_colocated",etat0_start_file_colocated) 
50      CALL allocate_field(f_theta_rhodz_1d,field_t,type_real,llm,name='theta_rhodz')
51
52!$OMP BARRIER
53       DO ind=1, ndomain
54         IF (.NOT. assigned_domain(ind) .OR. .NOT. is_omp_level_master) CYCLE
55         f_q(ind)%rval4d(:,:,:)=0.
56       ENDDO
57!$OMP BARRIER
58      CALL checksum(f_q)
59      IF (.NOT. etat0_start_file_colocated) THEN   
60        CALL allocate_field(f_ulon,field_t,type_real,llm,name='ulon')
61        CALL allocate_field(f_ulat,field_t,type_real,llm,name='ulat')
62        CALL read_start(itau0,f_ps,f_phis,f_theta_rhodz_1d,f_u, f_q)
63        CALL transfert_request(f_ps,req_i1)
64        CALL transfert_request(f_ps,req_i0)
65        CALL transfert_request(f_phis,req_i1)
66        CALL transfert_request(f_phis,req_i0)
67        CALL transfert_request(f_theta_rhodz_1d,req_i1)
68        CALL transfert_request(f_theta_rhodz_1d,req_i0)
69        CALL transfert_request(f_q,req_i1)
70        CALL transfert_request(f_q,req_i0)
71        CALL transfert_request(f_u,req_e1_vect)
72        CALL transfert_request(f_u,req_e0_vect)
73        CALL un2ulonlat(f_u,f_ulon,f_ulat)
74
75        CALL deallocate_field(f_ulon)
76        CALL deallocate_field(f_ulat)
77
78      ELSE
79        CALL allocate_field(f_ulon,field_t,type_real,llm,name='ulon')
80        CALL allocate_field(f_ulat,field_t,type_real,llm,name='ulat')
81        CALL read_start(itau0,f_ps,f_phis,f_theta_rhodz_1d,f_ulon,f_ulat, f_q)
82        CALL transfert_request(f_ulat,req_i1)
83        CALL transfert_request(f_ulat,req_i0)
84        CALL transfert_request(f_ulon,req_i1)
85        CALL transfert_request(f_ulon,req_i0)
86
87        CALL ulonlat2un(f_ulon,f_ulat,f_u)
88
89        CALL transfert_request(f_ps,req_i1)
90        CALL transfert_request(f_ps,req_i0)
91        CALL transfert_request(f_phis,req_i1)
92        CALL transfert_request(f_phis,req_i0)
93        CALL transfert_request(f_theta_rhodz_1d,req_i1)
94        CALL transfert_request(f_theta_rhodz_1d,req_i0)
95        CALL transfert_request(f_q,req_i1)
96        CALL transfert_request(f_q,req_i0)
97        CALL transfert_request(f_u,req_e1_vect)
98        CALL transfert_request(f_u,req_e0_vect)
99       
100        CALL deallocate_field(f_ulon)
101        CALL deallocate_field(f_ulat)
102      ENDIF
103
104!$OMP BARRIER   
105    DO ind=1, ndomain
106       IF (.NOT. assigned_domain(ind) .OR. .NOT. is_omp_level_master) CYCLE
107       theta_rhodz=f_theta_rhodz(ind) ; theta_rhodz_1d=f_theta_rhodz_1d(ind)
108       theta_rhodz(:,:,1)=theta_rhodz_1d(:,:)
109    ENDDO
110!$OMP BARRIER   
111
112      CALL bcast(itau0)
113      raz=.FALSE.
114      CALL getin("etat0_start_iteration_reset",raz)
115      IF (raz) itau0=0
116      CALL getin("etat0_start_iteration",itau0)       
117
118  END SUBROUTINE etat0
119 
120 
121END MODULE etat0_start_file_mod
Note: See TracBrowser for help on using the repository browser.