--- trunk/bibio/Writefield/writefield.f 2014/09/16 14:00:41 108 +++ trunk/Sources/bibio/writefield.f 2015/04/29 15:47:56 134 @@ -1,9 +1,13 @@ module WriteField_m - use writefield_gen_m, only: writefield_gen + use CreateNewField_m, only: CreateNewField, ncid, nbfield, MaxWriteField + use GetFieldIndex_m, only: GetFieldIndex + USE netcdf95, ONLY: nf95_put_var, nf95_sync implicit none + integer, save:: Record(MaxWriteField) + interface WriteField module procedure WriteField3d,WriteField2d,WriteField1d end interface WriteField @@ -14,36 +18,84 @@ contains subroutine WriteField1d(name,Field) - character(len=*) :: name - real, dimension(:) :: Field - integer, dimension(1) :: Dim - Dim=shape(Field) - call WriteField_gen(name,Field,Dim(1),1,1) + character(len=*), intent(in):: name + real, intent(in):: Field(:) + + ! Local: + integer index + + !------------------------------------------- + + Index=GetFieldIndex(name) + + if (Index==-1) then + call CreateNewField(name, shape(field)) + Index=nbfield + Record(Index) = 1 + else + Record(Index)=Record(Index)+1 + endif + + call NF95_PUT_VAR(Ncid(Index), Varid = 1, values = Field, & + start = (/1, Record(Index)/)) + call nf95_sync(Ncid(Index)) end subroutine WriteField1d !**************************************************************** subroutine WriteField2d(name,Field) - character(len=*) :: name - real, dimension(:,:) :: Field - integer, dimension(2) :: Dim - Dim=shape(Field) - call WriteField_gen(name,Field,Dim(1),Dim(2),1) + character(len=*), intent(in):: name + real, intent(in):: Field(:, :) + + ! Local: + integer index + + !------------------------------------------- + + Index=GetFieldIndex(name) + + if (Index==-1) then + call CreateNewField(name, shape(field)) + Index=nbfield + Record(Index) = 1 + else + Record(Index)=Record(Index)+1 + endif + + call NF95_PUT_VAR(Ncid(Index), Varid = 1, values = Field, & + start = (/1, 1, Record(Index)/)) + call nf95_sync(Ncid(Index)) end subroutine WriteField2d !**************************************************************** subroutine WriteField3d(name,Field) - character(len=*) :: name - real, dimension(:,:,:) :: Field - integer, dimension(3) :: Dim - Dim=shape(Field) - call WriteField_gen(name,Field,Dim(1),Dim(2),Dim(3)) + character(len=*), intent(in):: name + real, intent(in):: Field(:, :, :) + + ! Local: + integer index + + !------------------------------------------- + + Index=GetFieldIndex(name) + + if (Index==-1) then + call CreateNewField(name, shape(field)) + Index=nbfield + Record(Index) = 1 + else + Record(Index)=Record(Index)+1 + endif + + call NF95_PUT_VAR(Ncid(Index), Varid = 1, values = Field, & + start = (/1, 1, 1, Record(Index)/)) + call nf95_sync(Ncid(Index)) end subroutine WriteField3d