Ignore:
Timestamp:
09/26/16 14:09:01 (8 years ago)
Author:
ymipsl
Message:
  • Add functionnality to input/output field of type U (value on the edges)
  • Management of start/restart files by XIOS

YM

File:
1 edited

Legend:

Unmodified
Added
Removed
  • codes/icosagcm/trunk/src/restart.f90

    r358 r483  
    99 
    1010CONTAINS 
     11   
     12  SUBROUTINE init_restart 
     13  USE xios_mod 
     14  USE icosa 
     15  USE time_mod 
     16  USE omp_para 
     17  IMPLICIT NONE 
     18  CHARACTER(LEN=255) :: start_file_name 
     19  CHARACTER(LEN=255) :: restart_file_name 
     20     
     21    IF (using_xios) THEN 
     22      start_file_name="start" 
     23      CALL getin("start_file_name",start_file_name) 
     24      restart_file_name="restart" 
     25      CALL getin("restart_file_name",restart_file_name) 
     26      IF (is_omp_master) THEN 
     27        CALL xios_set_file_attr("start",name=TRIM(ADJUSTL(start_file_name)),output_freq=(itaumax+1)*xios_timestep) 
     28        CALL xios_set_file_attr("restart",name=TRIM(ADJUSTL(restart_file_name)),output_freq=itaumax*xios_timestep) 
     29        CALL xios_set_fieldgroup_attr("group_restart", freq_op=itaumax*xios_timestep) 
     30        CALL xios_set_axis_attr("lev_read", n_glo=llm) 
     31      ENDIF 
     32    ENDIF 
     33     
     34  END SUBROUTINE init_restart 
     35   
    1136   
    1237  SUBROUTINE write_restart(it,field0 ,field1 ,field2 ,field3 ,field4 ,field5 ,field6 ,field7 ,field8 ,field9,   & 
     
    1843  USE netcdf_mod 
    1944  USE mpipara 
     45  USE omp_para 
    2046  USE getin_mod 
    2147  USE spherical_geom_mod 
    2248  USE transfert_mod 
    2349  USE disvert_mod 
    24   
     50  USE xios_mod 
    2551  IMPLICIT NONE  
    2652  INTEGER,INTENT(IN)     :: it 
     
    4773    CALL getin("restart_file_name",restart_file_name) 
    4874 
    49 !$OMP MASTER 
    50  
    51     nfield=0 
    52     IF (PRESENT(field0))  THEN ; nfield=nfield+1 ; field_array(nfield)%field=>field0  ; ENDIF 
    53     IF (PRESENT(field1))  THEN ; nfield=nfield+1 ; field_array(nfield)%field=>field1  ; ENDIF 
    54     IF (PRESENT(field2))  THEN ; nfield=nfield+1 ; field_array(nfield)%field=>field2  ; ENDIF 
    55     IF (PRESENT(field3))  THEN ; nfield=nfield+1 ; field_array(nfield)%field=>field3  ; ENDIF 
    56     IF (PRESENT(field4))  THEN ; nfield=nfield+1 ; field_array(nfield)%field=>field4  ; ENDIF 
    57     IF (PRESENT(field5))  THEN ; nfield=nfield+1 ; field_array(nfield)%field=>field5  ; ENDIF 
    58     IF (PRESENT(field6))  THEN ; nfield=nfield+1 ; field_array(nfield)%field=>field6  ; ENDIF 
    59     IF (PRESENT(field7))  THEN ; nfield=nfield+1 ; field_array(nfield)%field=>field7  ; ENDIF 
    60     IF (PRESENT(field8))  THEN ; nfield=nfield+1 ; field_array(nfield)%field=>field8  ; ENDIF 
    61     IF (PRESENT(field9))  THEN ; nfield=nfield+1 ; field_array(nfield)%field=>field9  ; ENDIF 
    62     IF (PRESENT(field10)) THEN ; nfield=nfield+1 ; field_array(nfield)%field=>field10 ; ENDIF 
    63     IF (PRESENT(field11)) THEN ; nfield=nfield+1 ; field_array(nfield)%field=>field11 ; ENDIF 
    64     IF (PRESENT(field12)) THEN ; nfield=nfield+1 ; field_array(nfield)%field=>field12 ; ENDIF 
    65     IF (PRESENT(field13)) THEN ; nfield=nfield+1 ; field_array(nfield)%field=>field13 ; ENDIF 
    66     IF (PRESENT(field14)) THEN ; nfield=nfield+1 ; field_array(nfield)%field=>field14 ; ENDIF 
    67     IF (PRESENT(field15)) THEN ; nfield=nfield+1 ; field_array(nfield)%field=>field15 ; ENDIF 
    68     IF (PRESENT(field16)) THEN ; nfield=nfield+1 ; field_array(nfield)%field=>field16 ; ENDIF 
    69     IF (PRESENT(field17)) THEN ; nfield=nfield+1 ; field_array(nfield)%field=>field17 ; ENDIF 
    70     IF (PRESENT(field18)) THEN ; nfield=nfield+1 ; field_array(nfield)%field=>field18 ; ENDIF 
    71     IF (PRESENT(field19)) THEN ; nfield=nfield+1 ; field_array(nfield)%field=>field19 ; ENDIF 
    72      
    73        
    74  
    75     IF (is_mpi_root) THEN 
    76       status = NF90_CREATE(TRIM(ADJUSTL(restart_file_name))//'.nc', NF90_CLOBBER, ncid) 
    77       status = NF90_DEF_DIM(ncid,'cell',ncell_glo,cellId) 
    78       status = NF90_DEF_DIM(ncid,'edge',3*ncell_glo,edgeId) 
    79       status = NF90_DEF_DIM(ncid,'lev',llm,levId) 
    80       status = NF90_DEF_DIM(ncid,'nvert',nvert,vertId) 
    81       status = NF90_DEF_DIM(ncid,'nq',nqtot,nqId) 
    82       status = NF90_PUT_ATT(ncid,NF90_GLOBAL,"iteration",it) 
    83        
    84       status = NF90_DEF_VAR(ncid,'lon',NF90_DOUBLE,(/ cellId /),lonId) 
    85       status = NF90_PUT_ATT(ncid,lonId,"long_name","longitude") 
    86       status = NF90_PUT_ATT(ncid,lonId,"units","degrees_east") 
    87       status = NF90_PUT_ATT(ncid,lonId,"bounds","bounds_lon") 
    88       status = NF90_DEF_VAR(ncid,'lat',NF90_DOUBLE,(/ cellId /),latId) 
    89       status = NF90_PUT_ATT(ncid,latId,"long_name","latitude") 
    90       status = NF90_PUT_ATT(ncid,latId,"units","degrees_north") 
    91       status = NF90_PUT_ATT(ncid,latId,"bounds","bounds_lat") 
    92       status = NF90_DEF_VAR(ncid,'bounds_lon',NF90_DOUBLE,(/ vertId,cellId /),bounds_lonId) 
    93       status = NF90_DEF_VAR(ncid,'bounds_lat',NF90_DOUBLE,(/ vertId,cellId /),bounds_latId) 
    94       status = NF90_DEF_VAR(ncid,'lev',NF90_DOUBLE,(/ levId /),levAxisId) 
    95       status = NF90_PUT_ATT(ncid,levAxisId,"axis","Z") 
    96       status = NF90_PUT_ATT(ncid,levAxisId,"units","Pa") 
    97       status = NF90_PUT_ATT(ncid,levAxisId,"positive","down") 
    98        
     75    IF (using_xios) THEN 
     76      IF (PRESENT(field0))  THEN ; CALL  xios_write_field(TRIM(field0(1)%name)//'_restart',field0)  ; ENDIF 
     77      IF (PRESENT(field1))  THEN ; CALL  xios_write_field(TRIM(field1(1)%name)//'_restart',field1)  ; ENDIF 
     78      IF (PRESENT(field2))  THEN ; CALL  xios_write_field(TRIM(field2(1)%name)//'_restart',field2)  ; ENDIF 
     79      IF (PRESENT(field3))  THEN ; CALL  xios_write_field(TRIM(field3(1)%name)//'_restart',field3)  ; ENDIF 
     80      IF (PRESENT(field4))  THEN ; CALL  xios_write_field(TRIM(field4(1)%name)//'_restart',field4)  ; ENDIF 
     81      IF (PRESENT(field5))  THEN ; CALL  xios_write_field(TRIM(field5(1)%name)//'_restart',field5)  ; ENDIF 
     82      IF (PRESENT(field6))  THEN ; CALL  xios_write_field(TRIM(field6(1)%name)//'_restart',field6)  ; ENDIF 
     83      IF (PRESENT(field7))  THEN ; CALL  xios_write_field(TRIM(field7(1)%name)//'_restart',field7)  ; ENDIF 
     84      IF (PRESENT(field8))  THEN ; CALL  xios_write_field(TRIM(field8(1)%name)//'_restart',field8)  ; ENDIF 
     85      IF (PRESENT(field9))  THEN ; CALL  xios_write_field(TRIM(field9(1)%name)//'_restart',field9)  ; ENDIF 
     86      IF (PRESENT(field10))  THEN ; CALL  xios_write_field(TRIM(field10(1)%name)//'_restart',field10)  ; ENDIF 
     87      IF (PRESENT(field11))  THEN ; CALL  xios_write_field(TRIM(field11(1)%name)//'_restart',field11)  ; ENDIF 
     88      IF (PRESENT(field12))  THEN ; CALL  xios_write_field(TRIM(field12(1)%name)//'_restart',field12)  ; ENDIF 
     89      IF (PRESENT(field13))  THEN ; CALL  xios_write_field(TRIM(field13(1)%name)//'_restart',field13)  ; ENDIF 
     90      IF (PRESENT(field14))  THEN ; CALL  xios_write_field(TRIM(field14(1)%name)//'_restart',field14)  ; ENDIF 
     91      IF (PRESENT(field15))  THEN ; CALL  xios_write_field(TRIM(field15(1)%name)//'_restart',field15)  ; ENDIF 
     92      IF (PRESENT(field16))  THEN ; CALL  xios_write_field(TRIM(field16(1)%name)//'_restart',field16)  ; ENDIF 
     93      IF (PRESENT(field17))  THEN ; CALL  xios_write_field(TRIM(field17(1)%name)//'_restart',field17)  ; ENDIF 
     94      IF (PRESENT(field18))  THEN ; CALL  xios_write_field(TRIM(field18(1)%name)//'_restart',field18)  ; ENDIF 
     95      IF (PRESENT(field19))  THEN ; CALL  xios_write_field(TRIM(field19(1)%name)//'_restart',field19)  ; ENDIF 
     96      IF (is_omp_master) CALL xios_send_field("it_restart",it*1.0) 
     97 
     98    ELSE 
     99 
     100    !$OMP MASTER 
     101       
     102      nfield=0 
     103      IF (PRESENT(field0))  THEN ; nfield=nfield+1 ; field_array(nfield)%field=>field0  ; ENDIF 
     104      IF (PRESENT(field1))  THEN ; nfield=nfield+1 ; field_array(nfield)%field=>field1  ; ENDIF 
     105      IF (PRESENT(field2))  THEN ; nfield=nfield+1 ; field_array(nfield)%field=>field2  ; ENDIF 
     106      IF (PRESENT(field3))  THEN ; nfield=nfield+1 ; field_array(nfield)%field=>field3  ; ENDIF 
     107      IF (PRESENT(field4))  THEN ; nfield=nfield+1 ; field_array(nfield)%field=>field4  ; ENDIF 
     108      IF (PRESENT(field5))  THEN ; nfield=nfield+1 ; field_array(nfield)%field=>field5  ; ENDIF 
     109      IF (PRESENT(field6))  THEN ; nfield=nfield+1 ; field_array(nfield)%field=>field6  ; ENDIF 
     110      IF (PRESENT(field7))  THEN ; nfield=nfield+1 ; field_array(nfield)%field=>field7  ; ENDIF 
     111      IF (PRESENT(field8))  THEN ; nfield=nfield+1 ; field_array(nfield)%field=>field8  ; ENDIF 
     112      IF (PRESENT(field9))  THEN ; nfield=nfield+1 ; field_array(nfield)%field=>field9  ; ENDIF 
     113      IF (PRESENT(field10)) THEN ; nfield=nfield+1 ; field_array(nfield)%field=>field10 ; ENDIF 
     114      IF (PRESENT(field11)) THEN ; nfield=nfield+1 ; field_array(nfield)%field=>field11 ; ENDIF 
     115      IF (PRESENT(field12)) THEN ; nfield=nfield+1 ; field_array(nfield)%field=>field12 ; ENDIF 
     116      IF (PRESENT(field13)) THEN ; nfield=nfield+1 ; field_array(nfield)%field=>field13 ; ENDIF 
     117      IF (PRESENT(field14)) THEN ; nfield=nfield+1 ; field_array(nfield)%field=>field14 ; ENDIF 
     118      IF (PRESENT(field15)) THEN ; nfield=nfield+1 ; field_array(nfield)%field=>field15 ; ENDIF 
     119      IF (PRESENT(field16)) THEN ; nfield=nfield+1 ; field_array(nfield)%field=>field16 ; ENDIF 
     120      IF (PRESENT(field17)) THEN ; nfield=nfield+1 ; field_array(nfield)%field=>field17 ; ENDIF 
     121      IF (PRESENT(field18)) THEN ; nfield=nfield+1 ; field_array(nfield)%field=>field18 ; ENDIF 
     122      IF (PRESENT(field19)) THEN ; nfield=nfield+1 ; field_array(nfield)%field=>field19 ; ENDIF 
     123       
     124         
     125 
     126      IF (is_mpi_root) THEN 
     127        status = NF90_CREATE(TRIM(ADJUSTL(restart_file_name))//'.nc', NF90_CLOBBER, ncid) 
     128        status = NF90_DEF_DIM(ncid,'cell',ncell_glo,cellId) 
     129        status = NF90_DEF_DIM(ncid,'edge',3*ncell_glo,edgeId) 
     130        status = NF90_DEF_DIM(ncid,'lev',llm,levId) 
     131        status = NF90_DEF_DIM(ncid,'nvert',nvert,vertId) 
     132        status = NF90_DEF_DIM(ncid,'nq',nqtot,nqId) 
     133        status = NF90_PUT_ATT(ncid,NF90_GLOBAL,"iteration",it) 
     134         
     135        status = NF90_DEF_VAR(ncid,'lon',NF90_DOUBLE,(/ cellId /),lonId) 
     136        status = NF90_PUT_ATT(ncid,lonId,"long_name","longitude") 
     137        status = NF90_PUT_ATT(ncid,lonId,"units","degrees_east") 
     138        status = NF90_PUT_ATT(ncid,lonId,"bounds","bounds_lon") 
     139        status = NF90_DEF_VAR(ncid,'lat',NF90_DOUBLE,(/ cellId /),latId) 
     140        status = NF90_PUT_ATT(ncid,latId,"long_name","latitude") 
     141        status = NF90_PUT_ATT(ncid,latId,"units","degrees_north") 
     142        status = NF90_PUT_ATT(ncid,latId,"bounds","bounds_lat") 
     143        status = NF90_DEF_VAR(ncid,'bounds_lon',NF90_DOUBLE,(/ vertId,cellId /),bounds_lonId) 
     144        status = NF90_DEF_VAR(ncid,'bounds_lat',NF90_DOUBLE,(/ vertId,cellId /),bounds_latId) 
     145        status = NF90_DEF_VAR(ncid,'lev',NF90_DOUBLE,(/ levId /),levAxisId) 
     146        status = NF90_PUT_ATT(ncid,levAxisId,"axis","Z") 
     147        status = NF90_PUT_ATT(ncid,levAxisId,"units","Pa") 
     148        status = NF90_PUT_ATT(ncid,levAxisId,"positive","down") 
     149         
     150        DO nf=1,nfield 
     151          field=>field_array(nf)%field 
     152          IF (field(1)%field_type==field_T) THEN 
     153            IF (field(1)%ndim==2) THEN 
     154              status = NF90_DEF_VAR(ncid,TRIM(ADJUSTL(field(1)%name)),NF90_DOUBLE,(/ cellId /),fieldId(nf)) 
     155              status = NF90_PUT_ATT(ncid,FieldId(nf),"coordinates","lon lat") 
     156            ELSE IF (field(1)%ndim==3) THEN 
     157              status = NF90_DEF_VAR(ncid,TRIM(ADJUSTL(field(1)%name)),NF90_DOUBLE,(/ cellId, levId /),fieldId(nf)) 
     158              status = NF90_PUT_ATT(ncid,FieldId(nf),"coordinates","lev lon lat") 
     159            ELSE IF (field(1)%ndim==4) THEN 
     160              status = NF90_DEF_VAR(ncid,TRIM(ADJUSTL(field(1)%name)),NF90_DOUBLE,(/ cellId, levId,nqId /),fieldId(nf)) 
     161              status = NF90_PUT_ATT(ncid,FieldId(nf),"coordinates","nq lev lon lat") 
     162            ENDIF 
     163          ELSE IF (field(1)%field_type==field_U) THEN 
     164            IF (field(1)%ndim==2) THEN 
     165              status = NF90_DEF_VAR(ncid,TRIM(ADJUSTL(field(1)%name)),NF90_DOUBLE,(/ edgeId /),fieldId(nf)) 
     166            ELSE IF (field(1)%ndim==3) THEN 
     167              status = NF90_DEF_VAR(ncid,TRIM(ADJUSTL(field(1)%name)),NF90_DOUBLE,(/ edgeId, levId /),fieldId(nf)) 
     168            ELSE IF (field(1)%ndim==4) THEN 
     169              status = NF90_DEF_VAR(ncid,TRIM(ADJUSTL(field(1)%name)),NF90_DOUBLE,(/ edgeId, levId, nqId /),fieldId(nf)) 
     170            ENDIF 
     171          ENDIF 
     172        ENDDO 
     173             
     174         
     175        status = NF90_ENDDEF(ncid) 
     176         
     177        ALLOCATE(lon(ncell_glo),lat(ncell_glo),bounds_lon(0:nvert-1,ncell_glo),bounds_lat(0:nvert-1,ncell_glo)) 
     178        DO ind=1,ndomain_glo 
     179          d=>domain_glo(ind) 
     180          DO j=d%jj_begin,d%jj_end 
     181            DO i=d%ii_begin,d%ii_end 
     182               ind_glo=d%assign_cell_glo(i,j) 
     183               CALL xyz2lonlat(d%xyz(:,i,j),lon(ind_glo),lat(ind_glo)) 
     184               lon(ind_glo)=lon(ind_glo)*180/Pi 
     185               lat(ind_glo)=lat(ind_glo)*180/Pi 
     186               DO k=0,5 
     187                   CALL xyz2lonlat(d%vertex(:,k,i,j),bounds_lon(k,ind_glo), bounds_lat(k,ind_glo)) 
     188                   bounds_lat(k,ind_glo)=bounds_lat(k,ind_glo)*180/Pi 
     189                   bounds_lon(k,ind_glo)=bounds_lon(k,ind_glo)*180/Pi 
     190               ENDDO 
     191            ENDDO 
     192          ENDDO 
     193        ENDDO 
     194 
     195        status=NF90_PUT_VAR(ncid,lonid,REAL(lon,r8),start=(/ 1 /),count=(/ ncell_glo /)) 
     196        status=NF90_PUT_VAR(ncid,latid,REAL(lat,r8),start=(/ 1 /),count=(/ ncell_glo /)) 
     197        status=NF90_PUT_VAR(ncid,bounds_lonId,REAL(bounds_lon,r8),start=(/ 1,1 /),count=(/ nvert,ncell_glo /)) 
     198        status=NF90_PUT_VAR(ncid,bounds_latId,REAL(bounds_lat,r8),start=(/ 1,1 /),count=(/ nvert,ncell_glo /)) 
     199        status=NF90_PUT_VAR(ncid,levAxisId,REAL(presnivs,r8),start=(/ 1 /),count=(/ llm /)) 
     200      ENDIF 
     201 
    99202      DO nf=1,nfield 
    100203        field=>field_array(nf)%field 
    101         IF (field(1)%field_type==field_T) THEN 
    102           IF (field(1)%ndim==2) THEN 
    103             status = NF90_DEF_VAR(ncid,TRIM(ADJUSTL(field(1)%name)),NF90_DOUBLE,(/ cellId /),fieldId(nf)) 
    104             status = NF90_PUT_ATT(ncid,FieldId(nf),"coordinates","lon lat") 
    105           ELSE IF (field(1)%ndim==3) THEN 
    106             status = NF90_DEF_VAR(ncid,TRIM(ADJUSTL(field(1)%name)),NF90_DOUBLE,(/ cellId, levId /),fieldId(nf)) 
    107             status = NF90_PUT_ATT(ncid,FieldId(nf),"coordinates","lev lon lat") 
    108           ELSE IF (field(1)%ndim==4) THEN 
    109             status = NF90_DEF_VAR(ncid,TRIM(ADJUSTL(field(1)%name)),NF90_DOUBLE,(/ cellId, levId,nqId /),fieldId(nf)) 
    110             status = NF90_PUT_ATT(ncid,FieldId(nf),"coordinates","nq lev lon lat") 
    111           ENDIF 
    112         ELSE IF (field(1)%field_type==field_U) THEN 
    113           IF (field(1)%ndim==2) THEN 
    114             status = NF90_DEF_VAR(ncid,TRIM(ADJUSTL(field(1)%name)),NF90_DOUBLE,(/ edgeId /),fieldId(nf)) 
    115           ELSE IF (field(1)%ndim==3) THEN 
    116             status = NF90_DEF_VAR(ncid,TRIM(ADJUSTL(field(1)%name)),NF90_DOUBLE,(/ edgeId, levId /),fieldId(nf)) 
    117           ELSE IF (field(1)%ndim==4) THEN 
    118             status = NF90_DEF_VAR(ncid,TRIM(ADJUSTL(field(1)%name)),NF90_DOUBLE,(/ edgeId, levId, nqId /),fieldId(nf)) 
    119           ENDIF 
    120         ENDIF 
     204        CALL write_restart_field(field,fieldId(nf),ncid) 
    121205      ENDDO 
    122            
    123        
    124       status = NF90_ENDDEF(ncid) 
    125        
    126       ALLOCATE(lon(ncell_glo),lat(ncell_glo),bounds_lon(0:nvert-1,ncell_glo),bounds_lat(0:nvert-1,ncell_glo)) 
    127       DO ind=1,ndomain_glo 
    128         d=>domain_glo(ind) 
    129         DO j=d%jj_begin,d%jj_end 
    130           DO i=d%ii_begin,d%ii_end 
    131              ind_glo=d%assign_cell_glo(i,j) 
    132              CALL xyz2lonlat(d%xyz(:,i,j),lon(ind_glo),lat(ind_glo)) 
    133              lon(ind_glo)=lon(ind_glo)*180/Pi 
    134              lat(ind_glo)=lat(ind_glo)*180/Pi 
    135              DO k=0,5 
    136                  CALL xyz2lonlat(d%vertex(:,k,i,j),bounds_lon(k,ind_glo), bounds_lat(k,ind_glo)) 
    137                  bounds_lat(k,ind_glo)=bounds_lat(k,ind_glo)*180/Pi 
    138                  bounds_lon(k,ind_glo)=bounds_lon(k,ind_glo)*180/Pi 
    139              ENDDO 
    140           ENDDO 
    141         ENDDO 
    142       ENDDO 
    143  
    144       status=NF90_PUT_VAR(ncid,lonid,REAL(lon,r8),start=(/ 1 /),count=(/ ncell_glo /)) 
    145       status=NF90_PUT_VAR(ncid,latid,REAL(lat,r8),start=(/ 1 /),count=(/ ncell_glo /)) 
    146       status=NF90_PUT_VAR(ncid,bounds_lonId,REAL(bounds_lon,r8),start=(/ 1,1 /),count=(/ nvert,ncell_glo /)) 
    147       status=NF90_PUT_VAR(ncid,bounds_latId,REAL(bounds_lat,r8),start=(/ 1,1 /),count=(/ nvert,ncell_glo /)) 
    148       status=NF90_PUT_VAR(ncid,levAxisId,REAL(presnivs,r8),start=(/ 1 /),count=(/ llm /)) 
     206             
     207    !          status = NF90_DEF_VAR(ncid,TRIM(ADJUSTL(field(1)%name),NF90_DOUBLE,(/ ncellId /),fieldId(nf)) 
     208    !        ELSE IF (field(1)%ndim==3) THEN 
     209    !          status = NF90_DEF_VAR(ncid,TRIM(ADJUSTL(field(1)%name),NF90_DOUBLE,(/ ncellId, levId /),fieldId(nf)) 
     210    !        ENDIF 
     211    !      ENDDO 
     212 
     213 
     214      IF (is_mpi_root) THEN 
     215        status = NF90_CLOSE(ncid)       
     216      ENDIF 
     217     
     218    !$OMP END MASTER 
     219     
    149220    ENDIF 
    150  
    151     DO nf=1,nfield 
    152       field=>field_array(nf)%field 
    153       CALL write_restart_field(field,fieldId(nf),ncid) 
    154     ENDDO 
    155            
    156 !          status = NF90_DEF_VAR(ncid,TRIM(ADJUSTL(field(1)%name),NF90_DOUBLE,(/ ncellId /),fieldId(nf)) 
    157 !        ELSE IF (field(1)%ndim==3) THEN 
    158 !          status = NF90_DEF_VAR(ncid,TRIM(ADJUSTL(field(1)%name),NF90_DOUBLE,(/ ncellId, levId /),fieldId(nf)) 
    159 !        ENDIF 
    160 !      ENDDO 
    161  
    162  
    163     IF (is_mpi_root) THEN 
    164       status = NF90_CLOSE(ncid)       
    165     ENDIF 
    166 !$OMP END MASTER 
    167221   
    168222  END SUBROUTINE write_restart 
     
    178232  USE spherical_geom_mod 
    179233  USE transfert_mod 
     234  USE xios_mod 
    180235  IMPLICIT NONE 
    181236    TYPE(t_field),POINTER :: field(:) 
     
    274329                      ind_glo=d%assign_cell_glo(i,j) 
    275330                      e=cell_glo(ind_glo)%edge(MOD(k+d%delta(i,j)+6,6))   
    276                       global_field2d(ind_glo)=d%edge_assign_sign(k,i,j)*field_glo(ind)%rval2d(ij+d%u_pos(k)) 
     331                      global_field2d(e)=d%edge_assign_sign(k,i,j)*field_glo(ind)%rval2d(ij+d%u_pos(k)) 
    277332                    ENDIF 
    278333                  ENDDO 
     
    342397  USE spherical_geom_mod 
    343398  USE transfert_mod 
     399  USE xios_mod 
    344400  
    345401  IMPLICIT NONE 
     
    362418  INTEGER    :: status 
    363419  REAL(rstd),ALLOCATABLE :: lon(:),lat(:),bounds_lon(:,:),bounds_lat(:,:) 
    364     
     420  REAL(rstd) :: it_temp(1) 
    365421    start_file_name="start" 
    366422    CALL getin("start_file_name",start_file_name) 
    367423 
    368 !$OMP MASTER 
    369  
    370     nfield=0 
    371     IF (PRESENT(field0))  THEN ; nfield=nfield+1 ; field_array(nfield)%field=>field0  ; ENDIF 
    372     IF (PRESENT(field1))  THEN ; nfield=nfield+1 ; field_array(nfield)%field=>field1  ; ENDIF 
    373     IF (PRESENT(field2))  THEN ; nfield=nfield+1 ; field_array(nfield)%field=>field2  ; ENDIF 
    374     IF (PRESENT(field3))  THEN ; nfield=nfield+1 ; field_array(nfield)%field=>field3  ; ENDIF 
    375     IF (PRESENT(field4))  THEN ; nfield=nfield+1 ; field_array(nfield)%field=>field4  ; ENDIF 
    376     IF (PRESENT(field5))  THEN ; nfield=nfield+1 ; field_array(nfield)%field=>field5  ; ENDIF 
    377     IF (PRESENT(field6))  THEN ; nfield=nfield+1 ; field_array(nfield)%field=>field6  ; ENDIF 
    378     IF (PRESENT(field7))  THEN ; nfield=nfield+1 ; field_array(nfield)%field=>field7  ; ENDIF 
    379     IF (PRESENT(field8))  THEN ; nfield=nfield+1 ; field_array(nfield)%field=>field8  ; ENDIF 
    380     IF (PRESENT(field9))  THEN ; nfield=nfield+1 ; field_array(nfield)%field=>field9  ; ENDIF 
    381     IF (PRESENT(field10)) THEN ; nfield=nfield+1 ; field_array(nfield)%field=>field10 ; ENDIF 
    382     IF (PRESENT(field11)) THEN ; nfield=nfield+1 ; field_array(nfield)%field=>field11 ; ENDIF 
    383     IF (PRESENT(field12)) THEN ; nfield=nfield+1 ; field_array(nfield)%field=>field12 ; ENDIF 
    384     IF (PRESENT(field13)) THEN ; nfield=nfield+1 ; field_array(nfield)%field=>field13 ; ENDIF 
    385     IF (PRESENT(field14)) THEN ; nfield=nfield+1 ; field_array(nfield)%field=>field14 ; ENDIF 
    386     IF (PRESENT(field15)) THEN ; nfield=nfield+1 ; field_array(nfield)%field=>field15 ; ENDIF 
    387     IF (PRESENT(field16)) THEN ; nfield=nfield+1 ; field_array(nfield)%field=>field16 ; ENDIF 
    388     IF (PRESENT(field17)) THEN ; nfield=nfield+1 ; field_array(nfield)%field=>field17 ; ENDIF 
    389     IF (PRESENT(field18)) THEN ; nfield=nfield+1 ; field_array(nfield)%field=>field18 ; ENDIF 
    390     IF (PRESENT(field19)) THEN ; nfield=nfield+1 ; field_array(nfield)%field=>field19 ; ENDIF 
    391      
    392        
    393  
    394     IF (is_mpi_root) THEN 
    395       status = NF90_OPEN(TRIM(ADJUSTL(start_file_name))//'.nc', NF90_NOWRITE, ncid) 
     424 
     425 
     426    IF (using_xios) THEN 
     427      IF (PRESENT(field0))  THEN ; CALL  xios_read_field(TRIM(field0(1)%name)//'_start',field0)  ; ENDIF 
     428      IF (PRESENT(field1))  THEN ; CALL  xios_read_field(TRIM(field1(1)%name)//'_start',field1)  ; ENDIF 
     429      IF (PRESENT(field2))  THEN ; CALL  xios_read_field(TRIM(field2(1)%name)//'_start',field2)  ; ENDIF 
     430      IF (PRESENT(field3))  THEN ; CALL  xios_read_field(TRIM(field3(1)%name)//'_start',field3)  ; ENDIF 
     431      IF (PRESENT(field4))  THEN ; CALL  xios_read_field(TRIM(field4(1)%name)//'_start',field4)  ; ENDIF 
     432      IF (PRESENT(field5))  THEN ; CALL  xios_read_field(TRIM(field5(1)%name)//'_start',field5)  ; ENDIF 
     433      IF (PRESENT(field6))  THEN ; CALL  xios_read_field(TRIM(field6(1)%name)//'_start',field6)  ; ENDIF 
     434      IF (PRESENT(field7))  THEN ; CALL  xios_read_field(TRIM(field7(1)%name)//'_start',field7)  ; ENDIF 
     435      IF (PRESENT(field8))  THEN ; CALL  xios_read_field(TRIM(field8(1)%name)//'_start',field8)  ; ENDIF 
     436      IF (PRESENT(field9))  THEN ; CALL  xios_read_field(TRIM(field9(1)%name)//'_start',field9)  ; ENDIF 
     437      IF (PRESENT(field10))  THEN ; CALL  xios_read_field(TRIM(field10(1)%name)//'_start',field10)  ; ENDIF 
     438      IF (PRESENT(field11))  THEN ; CALL  xios_read_field(TRIM(field11(1)%name)//'_start',field11)  ; ENDIF 
     439      IF (PRESENT(field12))  THEN ; CALL  xios_read_field(TRIM(field12(1)%name)//'_start',field12)  ; ENDIF 
     440      IF (PRESENT(field13))  THEN ; CALL  xios_read_field(TRIM(field13(1)%name)//'_start',field13)  ; ENDIF 
     441      IF (PRESENT(field14))  THEN ; CALL  xios_read_field(TRIM(field14(1)%name)//'_start',field14)  ; ENDIF 
     442      IF (PRESENT(field15))  THEN ; CALL  xios_read_field(TRIM(field15(1)%name)//'_start',field15)  ; ENDIF 
     443      IF (PRESENT(field16))  THEN ; CALL  xios_read_field(TRIM(field16(1)%name)//'_start',field16)  ; ENDIF 
     444      IF (PRESENT(field17))  THEN ; CALL  xios_read_field(TRIM(field17(1)%name)//'_start',field17)  ; ENDIF 
     445      IF (PRESENT(field18))  THEN ; CALL  xios_read_field(TRIM(field18(1)%name)//'_start',field18)  ; ENDIF 
     446      IF (PRESENT(field19))  THEN ; CALL  xios_read_field(TRIM(field19(1)%name)//'_start',field19)  ; ENDIF 
     447! doesn't work for now, to be decomment when xios is ok 
     448!      CALL xios_recv_field("it_start",it_temp) 
     449!      it=it_temp(1) 
     450      it=0 
     451    ELSE 
     452 
     453    !$OMP MASTER 
     454 
     455      nfield=0 
     456      IF (PRESENT(field0))  THEN ; nfield=nfield+1 ; field_array(nfield)%field=>field0  ; ENDIF 
     457      IF (PRESENT(field1))  THEN ; nfield=nfield+1 ; field_array(nfield)%field=>field1  ; ENDIF 
     458      IF (PRESENT(field2))  THEN ; nfield=nfield+1 ; field_array(nfield)%field=>field2  ; ENDIF 
     459      IF (PRESENT(field3))  THEN ; nfield=nfield+1 ; field_array(nfield)%field=>field3  ; ENDIF 
     460      IF (PRESENT(field4))  THEN ; nfield=nfield+1 ; field_array(nfield)%field=>field4  ; ENDIF 
     461      IF (PRESENT(field5))  THEN ; nfield=nfield+1 ; field_array(nfield)%field=>field5  ; ENDIF 
     462      IF (PRESENT(field6))  THEN ; nfield=nfield+1 ; field_array(nfield)%field=>field6  ; ENDIF 
     463      IF (PRESENT(field7))  THEN ; nfield=nfield+1 ; field_array(nfield)%field=>field7  ; ENDIF 
     464      IF (PRESENT(field8))  THEN ; nfield=nfield+1 ; field_array(nfield)%field=>field8  ; ENDIF 
     465      IF (PRESENT(field9))  THEN ; nfield=nfield+1 ; field_array(nfield)%field=>field9  ; ENDIF 
     466      IF (PRESENT(field10)) THEN ; nfield=nfield+1 ; field_array(nfield)%field=>field10 ; ENDIF 
     467      IF (PRESENT(field11)) THEN ; nfield=nfield+1 ; field_array(nfield)%field=>field11 ; ENDIF 
     468      IF (PRESENT(field12)) THEN ; nfield=nfield+1 ; field_array(nfield)%field=>field12 ; ENDIF 
     469      IF (PRESENT(field13)) THEN ; nfield=nfield+1 ; field_array(nfield)%field=>field13 ; ENDIF 
     470      IF (PRESENT(field14)) THEN ; nfield=nfield+1 ; field_array(nfield)%field=>field14 ; ENDIF 
     471      IF (PRESENT(field15)) THEN ; nfield=nfield+1 ; field_array(nfield)%field=>field15 ; ENDIF 
     472      IF (PRESENT(field16)) THEN ; nfield=nfield+1 ; field_array(nfield)%field=>field16 ; ENDIF 
     473      IF (PRESENT(field17)) THEN ; nfield=nfield+1 ; field_array(nfield)%field=>field17 ; ENDIF 
     474      IF (PRESENT(field18)) THEN ; nfield=nfield+1 ; field_array(nfield)%field=>field18 ; ENDIF 
     475      IF (PRESENT(field19)) THEN ; nfield=nfield+1 ; field_array(nfield)%field=>field19 ; ENDIF 
     476       
     477         
     478 
     479      IF (is_mpi_root) THEN 
     480        status = NF90_OPEN(TRIM(ADJUSTL(start_file_name))//'.nc', NF90_NOWRITE, ncid) 
     481      ENDIF 
     482      
     483      DO nf=1,nfield 
     484        field=>field_array(nf)%field 
     485        status = nf90_inq_varid(ncid, TRIM(ADJUSTL(field(1)%name)), fieldId(nf)) 
     486        status = nf90_get_att(ncid, NF90_GLOBAL, "iteration", it) 
     487        CALL read_start_field(field,fieldId(nf),ncid) 
     488      ENDDO 
     489 
     490 
     491      IF (is_mpi_root) THEN 
     492        status = NF90_CLOSE(ncid)       
     493      ENDIF 
     494      
     495     !$OMP END MASTER 
     496     
    396497    ENDIF 
    397     
    398     DO nf=1,nfield 
    399       field=>field_array(nf)%field 
    400       status = nf90_inq_varid(ncid, TRIM(ADJUSTL(field(1)%name)), fieldId(nf)) 
    401       status = nf90_get_att(ncid, NF90_GLOBAL, "iteration", it) 
    402       CALL read_start_field(field,fieldId(nf),ncid) 
    403     ENDDO 
    404  
    405  
    406     IF (is_mpi_root) THEN 
    407       status = NF90_CLOSE(ncid)       
    408     ENDIF 
    409 !$OMP END MASTER 
    410498   
    411499  END SUBROUTINE read_start 
Note: See TracChangeset for help on using the changeset viewer.