source: codes/icosagcm/trunk/src/read_metric.f90

Last change on this file was 1012, checked in by ymipsl, 4 years ago

fix : read_metric variable was not initialized before calling getin, so no specific default value was considered.
YM

File size: 1.5 KB
Line 
1MODULE read_metric_mod
2
3 
4CONTAINS
5
6
7  SUBROUTINE read_metric
8  USE icosa
9  USE xios_mod
10  USE omp_para
11  USE checksum_mod
12  IMPLICIT NONE
13    TYPE(t_field),POINTER,SAVE :: f_xcell(:),f_ycell(:),f_zcell(:)
14    REAL(rstd), POINTER :: xcell(:), ycell(:), zcell(:)
15    TYPE(t_domain),POINTER :: d
16    INTEGER :: ind,i,j,n
17    CHARACTER(len=255) :: etat0_type
18    LOGICAL :: read_metric_=.FALSE.
19   
20    CALL getin('etat0',etat0_type)
21    CALL getin('read_metric', read_metric_) 
22   
23    CALL allocate_field(f_xcell,field_t,type_real,name='xcell')
24    CALL allocate_field(f_ycell,field_t,type_real,name='ycell')
25    CALL allocate_field(f_zcell,field_t,type_real,name='zcell')
26
27    CALL xios_set_context_input
28    CALL xios_init_write_field_input 
29
30    IF (TRIM(etat0_type)=='start_file' .AND. read_metric_) THEN
31   
32      CALL xios_read_field("xcell_start",f_xcell)
33      CALL xios_read_field("ycell_start",f_ycell)
34      CALL xios_read_field("zcell_start",f_zcell)
35
36      DO ind=1,ndomain
37        IF (.NOT. assigned_domain(ind)  .OR. .NOT. is_omp_level_master) CYCLE
38        d=>domain(ind)
39        CALL swap_dimensions(ind)
40        xcell=f_xcell(ind) 
41        ycell=f_ycell(ind) 
42        zcell=f_zcell(ind) 
43     
44        DO j=jj_begin,jj_end
45          DO i=ii_begin,ii_end
46            n=(j-1)*iim+i
47            d%xyz(1,i,j) = xcell(n) 
48            d%xyz(2,i,j) = ycell(n) 
49            d%xyz(3,i,j) = zcell(n) 
50          ENDDO
51        ENDDO
52      ENDDO
53    ENDIF
54
55    CALL xios_write_field_finalize
56    CALL xios_set_context
57
58  END SUBROUTINE read_metric
59
60
61
62END MODULE read_metric_mod
Note: See TracBrowser for help on using the repository browser.