Changeset 93
- Timestamp:
- 08/03/12 23:36:22 (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
codes/icosagcm/trunk/src/write_field.f90
r82 r93 61 61 end function GetFieldIndex 62 62 63 SUBROUTINE Writefield(name_in,field,nind )63 SUBROUTINE Writefield(name_in,field,nind,once) 64 64 USE domain_mod 65 65 USE field_mod … … 71 71 TYPE(t_field),POINTER :: field(:) 72 72 INTEGER,OPTIONAL,INTENT(IN) :: nind 73 LOGICAL,OPTIONAL,INTENT(IN) :: once 74 73 75 TYPE(t_field),POINTER :: field_glo(:) 74 76 … … 85 87 IF (mpi_rank==0) THEN 86 88 IF (PRESENT(nind)) THEN 87 CALL writefield_gen(name_in,field_glo,domain_glo,nind )89 CALL writefield_gen(name_in,field_glo,domain_glo,nind,once=once) 88 90 ELSE 89 CALL writefield_gen(name_in,field_glo,domain_glo,1,ndomain_glo )91 CALL writefield_gen(name_in,field_glo,domain_glo,1,ndomain_glo,once=once) 90 92 ENDIF 91 93 ENDIF … … 320 322 321 323 322 SUBROUTINE Writefield_gen(name_in, field, domain_type, ind_b_in, ind_e_in )324 SUBROUTINE Writefield_gen(name_in, field, domain_type, ind_b_in, ind_e_in,once ) 323 325 USE netcdf_mod 324 326 USE domain_mod … … 335 337 REAL(r8),ALLOCATABLE :: field_val3d(:,:) 336 338 REAL(r8),ALLOCATABLE :: field_val4d(:,:,:) 339 LOGICAL,OPTIONAL, INTENT(IN) :: once 337 340 TYPE(t_domain),POINTER :: d 338 341 INTEGER :: Index … … 375 378 Index=GetFieldIndex(name) 376 379 if (Index==-1) then 377 call create_header_gen(name_in,field,domain_type,ind_b_in,ind_e_in )380 call create_header_gen(name_in,field,domain_type,ind_b_in,ind_e_in,once) 378 381 Index=GetFieldIndex(name) 379 382 else … … 408 411 ENDDO 409 412 ENDDO 410 status=NF90_PUT_VAR(FieldId(Index),FieldVarId(index)%nc_id(1),Field_val2d, & 411 start=(/ 1,FieldIndex(Index) /),count=(/ncell,1 /)) 413 414 IF (PRESENT(once) .AND. once) THEN 415 status=NF90_PUT_VAR(FieldId(Index),FieldVarId(index)%nc_id(1),Field_val2d, & 416 start=(/ 1 /),count=(/ncell /)) 417 ELSE 418 status=NF90_PUT_VAR(FieldId(Index),FieldVarId(index)%nc_id(1),Field_val2d, & 419 start=(/ 1,FieldIndex(Index) /),count=(/ncell,1 /)) 420 ENDIF 421 412 422 DEALLOCATE(field_val2d) 413 423 ELSE IF (field(1)%ndim==3) THEN … … 427 437 ENDDO 428 438 429 status=NF90_PUT_VAR(FieldId(Index),FieldVarId(index)%nc_id(1),Field_val3d,start=(/ 1,1,FieldIndex(Index) /), & 430 count=(/ncell,size(field(1)%rval3d,2),1 /)) 439 IF (PRESENT(once) .AND. once) THEN 440 status=NF90_PUT_VAR(FieldId(Index),FieldVarId(index)%nc_id(1),Field_val3d,start=(/ 1,1 /), & 441 count=(/ncell,size(field(1)%rval3d,2) /)) 442 ELSE 443 status=NF90_PUT_VAR(FieldId(Index),FieldVarId(index)%nc_id(1),Field_val3d,start=(/ 1,1,FieldIndex(Index) /), & 444 count=(/ncell,size(field(1)%rval3d,2),1 /)) 445 ENDIF 446 431 447 DEALLOCATE(field_val3d) 432 448 ELSE IF (field(1)%ndim==4) THEN … … 449 465 ENDDO 450 466 451 status=NF90_PUT_VAR(FieldId(Index),FieldVarId(index)%nc_id(q),Field_val3d,start=(/ 1,1,FieldIndex(Index) /), & 452 count=(/ncell,size(field(1)%rval4d,2),1 /)) 467 IF (PRESENT(once) .AND. once) THEN 468 status=NF90_PUT_VAR(FieldId(Index),FieldVarId(index)%nc_id(q),Field_val3d,start=(/ 1,1 /), & 469 count=(/ncell,size(field(1)%rval4d,2),1 /)) 470 ELSE 471 status=NF90_PUT_VAR(FieldId(Index),FieldVarId(index)%nc_id(q),Field_val3d,start=(/ 1,1,FieldIndex(Index) /), & 472 count=(/ncell,size(field(1)%rval4d,2),1 /)) 473 ENDIF 453 474 DEALLOCATE(field_val3d) 454 475 ENDDO … … 503 524 ENDDO 504 525 505 status=NF90_PUT_VAR(FieldId(Index),FieldVarId(index)%nc_id(1), & 506 Field_val2d,start=(/ 1,FieldIndex(Index) /),count=(/ncell,1 /)) 526 IF (PRESENT(once) .AND. once) THEN 527 status=NF90_PUT_VAR(FieldId(Index),FieldVarId(index)%nc_id(1), & 528 Field_val2d,start=(/ 1 /),count=(/ncell /)) 529 ELSE 530 status=NF90_PUT_VAR(FieldId(Index),FieldVarId(index)%nc_id(1), & 531 Field_val2d,start=(/ 1,FieldIndex(Index) /),count=(/ncell,1 /)) 532 ENDIF 507 533 DEALLOCATE(field_val2d) 508 534 … … 529 555 ENDDO 530 556 531 status=NF90_PUT_VAR(FieldId(Index),FieldVarId(index)%nc_id(1),Field_val3d,start=(/ 1,1,FieldIndex(Index) /), & 532 count=(/ncell,size(field(1)%rval3d,2),1 /)) 557 IF (PRESENT(once) .AND. once) THEN 558 status=NF90_PUT_VAR(FieldId(Index),FieldVarId(index)%nc_id(1),Field_val3d,start=(/ 1,1 /), & 559 count=(/ncell,size(field(1)%rval3d,2) /)) 560 ELSE 561 status=NF90_PUT_VAR(FieldId(Index),FieldVarId(index)%nc_id(1),Field_val3d,start=(/ 1,1,FieldIndex(Index) /), & 562 count=(/ncell,size(field(1)%rval3d,2),1 /)) 563 ENDIF 533 564 DEALLOCATE(field_val3d) 534 565 … … 557 588 ENDDO 558 589 559 status=NF90_PUT_VAR(FieldId(Index),FieldVarId(index)%nc_id(q),Field_val3d,start=(/ 1,1,1,FieldIndex(Index) /), & 560 count=(/ncell,size(field(1)%rval4d,2),1 /)) 590 IF (PRESENT(once) .AND. once) THEN 591 status=NF90_PUT_VAR(FieldId(Index),FieldVarId(index)%nc_id(q),Field_val3d,start=(/ 1,1,1 /), & 592 count=(/ncell,size(field(1)%rval4d,2) /)) 593 ELSE 594 status=NF90_PUT_VAR(FieldId(Index),FieldVarId(index)%nc_id(q),Field_val3d,start=(/ 1,1,1,FieldIndex(Index) /), & 595 count=(/ncell,size(field(1)%rval4d,2),1 /)) 596 ENDIF 561 597 DEALLOCATE(field_val3d) 562 598 ENDDO … … 1111 1147 1112 1148 1113 SUBROUTINE Create_header_gen(name_in,field,domain_type,ind_b_in,ind_e_in )1149 SUBROUTINE Create_header_gen(name_in,field,domain_type,ind_b_in,ind_e_in,once) 1114 1150 USE netcdf_mod 1115 1151 USE field_mod … … 1125 1161 INTEGER,OPTIONAL,INTENT(IN) :: ind_b_in 1126 1162 INTEGER,OPTIONAL,INTENT(IN) :: ind_e_in 1163 LOGICAL,OPTIONAL,INTENT(IN) :: once 1164 1127 1165 INTEGER :: ncell 1128 1166 INTEGER :: nvert … … 1220 1258 1221 1259 IF (Field(ind_b)%ndim==2) THEN 1222 status = NF90_DEF_VAR(ncid,TRIM(ADJUSTL(name)),ncprec,(/ ncellId,timeId /),FieldVarId(NbField)%nc_id(1)) 1260 IF (PRESENT(once) .AND. once) THEN 1261 status = NF90_DEF_VAR(ncid,TRIM(ADJUSTL(name)),ncprec,(/ ncellId /),FieldVarId(NbField)%nc_id(1)) 1262 ELSE 1263 status = NF90_DEF_VAR(ncid,TRIM(ADJUSTL(name)),ncprec,(/ ncellId,timeId /),FieldVarId(NbField)%nc_id(1)) 1264 ENDIF 1223 1265 status = NF90_PUT_ATT(ncid,FieldVarId(NbField)%nc_id(1),"coordinates","lon_i lat_i") 1224 1266 ELSE IF (Field(ind_b)%ndim==3) THEN 1225 status = NF90_DEF_VAR(ncid,TRIM(ADJUSTL(name)),ncprec,(/ ncellId,dim3id,timeId /),FieldVarId(NbField)%nc_id(1)) 1267 IF (PRESENT(once) .AND. once) THEN 1268 status = NF90_DEF_VAR(ncid,TRIM(ADJUSTL(name)),ncprec,(/ ncellId,dim3id /),FieldVarId(NbField)%nc_id(1)) 1269 ELSE 1270 status = NF90_DEF_VAR(ncid,TRIM(ADJUSTL(name)),ncprec,(/ ncellId,dim3id,timeId /),FieldVarId(NbField)%nc_id(1)) 1271 ENDIF 1226 1272 status = NF90_PUT_ATT(ncid,FieldVarId(NbField)%nc_id(1),"coordinates","lon_i lat_i") 1227 1273 ELSE IF (Field(ind_b)%ndim==4) THEN 1228 1274 DO i=1,FieldVarId(NbField)%size 1229 status = NF90_DEF_VAR(ncid,TRIM(ADJUSTL(name))//int2str(i),ncprec,(/ ncellId,dim3id,timeId /), & 1230 FieldVarId(NbField)%nc_id(i)) 1275 IF (PRESENT(once) .AND. once) THEN 1276 status = NF90_DEF_VAR(ncid,TRIM(ADJUSTL(name))//int2str(i),ncprec,(/ ncellId,dim3id /), & 1277 FieldVarId(NbField)%nc_id(i)) 1278 ELSE 1279 status = NF90_DEF_VAR(ncid,TRIM(ADJUSTL(name))//int2str(i),ncprec,(/ ncellId,dim3id,timeId /), & 1280 FieldVarId(NbField)%nc_id(i)) 1281 ENDIF 1231 1282 status = NF90_PUT_ATT(ncid,FieldVarId(NbField)%nc_id(i),"coordinates","lon_i lat_i") 1232 1283 ENDDO … … 1331 1382 1332 1383 IF (Field(ind_b)%ndim==2) THEN 1333 status = NF90_DEF_VAR(ncid,TRIM(ADJUSTL(name)),ncprec,(/ ncellId,timeId /),FieldVarId(NbField)%nc_id(1)) 1384 IF (PRESENT(once) .AND. once) THEN 1385 status = NF90_DEF_VAR(ncid,TRIM(ADJUSTL(name)),ncprec,(/ ncellId /),FieldVarId(NbField)%nc_id(1)) 1386 ELSE 1387 status = NF90_DEF_VAR(ncid,TRIM(ADJUSTL(name)),ncprec,(/ ncellId,timeId /),FieldVarId(NbField)%nc_id(1)) 1388 ENDIF 1334 1389 status = NF90_PUT_ATT(ncid,FieldVarId(NbField)%nc_id(1),"coordinates","lon_v lat_v") 1335 1390 ELSE IF (Field(ind_b)%ndim==3) THEN 1336 status = NF90_DEF_VAR(ncid,TRIM(ADJUSTL(name)),ncprec,(/ ncellId,dim3id,timeId /),FieldVarId(NbField)%nc_id(1)) 1391 IF (PRESENT(once) .AND. once) THEN 1392 status = NF90_DEF_VAR(ncid,TRIM(ADJUSTL(name)),ncprec,(/ ncellId,dim3id /),FieldVarId(NbField)%nc_id(1)) 1393 ELSE 1394 status = NF90_DEF_VAR(ncid,TRIM(ADJUSTL(name)),ncprec,(/ ncellId,dim3id,timeId /),FieldVarId(NbField)%nc_id(1)) 1395 ENDIF 1337 1396 status = NF90_PUT_ATT(ncid,FieldVarId(NbField)%nc_id(1),"coordinates","lon_v lat_v") 1338 1397 ELSE IF (Field(ind_b)%ndim==4) THEN 1339 1398 DO q=1,FieldVarId(NbField)%size 1340 status = NF90_DEF_VAR(ncid,TRIM(ADJUSTL(name)//int2str(q)),ncprec, & 1341 (/ ncellId,dim3id,timeId /),FieldVarId(NbField)%nc_id(q)) 1399 IF (PRESENT(once) .AND. once) THEN 1400 status = NF90_DEF_VAR(ncid,TRIM(ADJUSTL(name)//int2str(q)),ncprec, & 1401 (/ ncellId,dim3id /),FieldVarId(NbField)%nc_id(q)) 1402 ELSE 1403 status = NF90_DEF_VAR(ncid,TRIM(ADJUSTL(name)//int2str(q)),ncprec, & 1404 (/ ncellId,dim3id,timeId /),FieldVarId(NbField)%nc_id(q)) 1405 ENDIF 1342 1406 status = NF90_PUT_ATT(ncid,FieldVarId(NbField)%nc_id(q),"coordinates","lon_v lat_v") 1343 1407 ENDDO
Note: See TracChangeset
for help on using the changeset viewer.