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

Last change on this file since 476 was 476, checked in by ymipsl, 8 years ago

Bug fix : read and write restart file was brocken due to new extra dimension to theta_rhodz

YM

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