Changeset 483 for codes/icosagcm/trunk/src/restart.f90
- Timestamp:
- 09/26/16 14:09:01 (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
codes/icosagcm/trunk/src/restart.f90
r358 r483 9 9 10 10 CONTAINS 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 11 36 12 37 SUBROUTINE write_restart(it,field0 ,field1 ,field2 ,field3 ,field4 ,field5 ,field6 ,field7 ,field8 ,field9, & … … 18 43 USE netcdf_mod 19 44 USE mpipara 45 USE omp_para 20 46 USE getin_mod 21 47 USE spherical_geom_mod 22 48 USE transfert_mod 23 49 USE disvert_mod 24 50 USE xios_mod 25 51 IMPLICIT NONE 26 52 INTEGER,INTENT(IN) :: it … … 47 73 CALL getin("restart_file_name",restart_file_name) 48 74 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 99 202 DO nf=1,nfield 100 203 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) 121 205 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 149 220 ENDIF 150 151 DO nf=1,nfield152 field=>field_array(nf)%field153 CALL write_restart_field(field,fieldId(nf),ncid)154 ENDDO155 156 ! status = NF90_DEF_VAR(ncid,TRIM(ADJUSTL(field(1)%name),NF90_DOUBLE,(/ ncellId /),fieldId(nf))157 ! ELSE IF (field(1)%ndim==3) THEN158 ! status = NF90_DEF_VAR(ncid,TRIM(ADJUSTL(field(1)%name),NF90_DOUBLE,(/ ncellId, levId /),fieldId(nf))159 ! ENDIF160 ! ENDDO161 162 163 IF (is_mpi_root) THEN164 status = NF90_CLOSE(ncid)165 ENDIF166 !$OMP END MASTER167 221 168 222 END SUBROUTINE write_restart … … 178 232 USE spherical_geom_mod 179 233 USE transfert_mod 234 USE xios_mod 180 235 IMPLICIT NONE 181 236 TYPE(t_field),POINTER :: field(:) … … 274 329 ind_glo=d%assign_cell_glo(i,j) 275 330 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)) 277 332 ENDIF 278 333 ENDDO … … 342 397 USE spherical_geom_mod 343 398 USE transfert_mod 399 USE xios_mod 344 400 345 401 IMPLICIT NONE … … 362 418 INTEGER :: status 363 419 REAL(rstd),ALLOCATABLE :: lon(:),lat(:),bounds_lon(:,:),bounds_lat(:,:) 364 420 REAL(rstd) :: it_temp(1) 365 421 start_file_name="start" 366 422 CALL getin("start_file_name",start_file_name) 367 423 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 396 497 ENDIF 397 398 DO nf=1,nfield399 field=>field_array(nf)%field400 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 ENDDO404 405 406 IF (is_mpi_root) THEN407 status = NF90_CLOSE(ncid)408 ENDIF409 !$OMP END MASTER410 498 411 499 END SUBROUTINE read_start
Note: See TracChangeset
for help on using the changeset viewer.