module mavhrr use mkinds use mdates use mncio use mutil use mgdem use mgrid use mhycom use miotsis use mpobs use mprep contains subroutine avhrrglb2tgt(cdtg) implicit none integer(i4) :: fid,i,j,iunit,k character(:), allocatable :: filename,fname character(:), allocatable :: vname integer(i4) :: vtype integer(i4) :: vdims(2),vdim(1) integer(i4),parameter :: src_nx=1440,src_ny=720 integer(i4) :: dst_nx,dst_ny real(r4), allocatable :: src_lon(:),src_lat(:),src_sst(:,:),src_sst_err(:,:) real(r4), allocatable :: tmp_lon(:),tmp_sst(:,:),tmp_sst_err(:,:) real(r4), allocatable :: dst_lon(:,:),dst_lat(:,:),dst_sst(:,:),dst_sst_err(:,:) real(r4) :: ptlon, ptlat,grdi1,grdj1,grdi2,grdj2 real(r4),allocatable :: depth(:,:), grid_lat(:,:) real(r4),allocatable :: w1(:),w2(:,:),L4sst(:,:),L4sst_err(:,:) integer(i4) :: offset,iif,iil,jjf,jjl,nf,iwp,npass,den,nob_grp logical(bl) :: lexist,lmask(src_nx,src_ny) integer(i4) :: iw(src_nx,src_ny) character(cl) :: buffer,depthFile character(10) :: cdtg integer(i4),allocatable :: indx(:,:),ob_grp_present(:) integer(i4) :: nsst,nsx,nsy real(r4),allocatable :: psst_lon(:),psst_lat(:),psst_sst(:),psst_err(:) !model info character(len=20) :: model,fcst_file,anl_file logical(bl) :: lglb,fcst_file_out character(len=5) :: pfx NAMELIST/model_info/model,sigver,lglb,fcst_file,anl_file,fcst_file_out,pfx OPEN(21,FILE='tsis.nlist') READ(21,NML=model_info) CLOSE(21) call read_sst_prep_params() call read_obs_location() nob_grp=4 allocate(ob_grp_present(nob_grp)) allocate(w1(src_nx)) allocate(w2(src_nx,src_ny)) allocate(src_lon(src_nx)) allocate(tmp_lon(src_nx)) allocate(src_lat(src_ny)) allocate(src_sst(src_nx,src_ny)) allocate(src_sst_err(src_nx,src_ny)) allocate(tmp_sst(src_nx,src_ny)) allocate(tmp_sst_err(src_nx,src_ny)) allocate(dst_sst(nx,ny)) allocate(dst_sst_err(nx,ny)) !20070101-NCDC-L4LRblend-GLOB-v01-fv01_0-AVHRR_AMSR_OI.nc.bz2 !filename=trim(sst_data_location)//cdtg(1:8)//"120000-NCEI-L4_GHRSST-SSTblend-AVHRR_OI-GLOB-v02.0-fv02.0.nc" !print *, filename !filename=trim(sst_data_location)//"avhrr-only-v2."//cdtg(1:8)//".nc" if(gridded_sst_file_pfx=="avhrr") then !!Alex filename=trim(sst_data_location)//"avhrr-only-v2."//cdtg(1:8)//".nc" filename=trim(sst_data_location)//"oisst-avhrr-v02r01."//cdtg(1:8)//".nc" INQUIRE(FILE=filename, EXIST=lexist) if(lexist) then write(*,*) "Avhrr: OISST ", filename call nciopn(filename,fid) call nciorv(filename,fid,"lon",src_lon) call nciorv(filename,fid,"lat",src_lat) call nciorv(filename,fid,"sst",src_sst) call nciorv(filename,fid,"err",src_sst_err) call nciocl(filename,fid) endif else if (gridded_sst_file_pfx=="NCEI") then filename=trim(sst_data_location)//cdtg(1:8)//"120000-NCEI-L4_GHRSST-SSTblend-AVHRR_OI-GLOB-v02.0-fv02.0.nc" INQUIRE(FILE=filename, EXIST=lexist) if(lexist) then write(*,*) "Avhrr: OISST ", filename call nciopn(filename,fid) call nciorv(filename,fid,"lon",src_lon) call nciorv(filename,fid,"lat",src_lat) !call nciorv(filename,fid,"sst",src_sst) !call nciorv(filename,fid,"err",src_sst_err) call nciorv(filename,fid,"analysed_sst",src_sst) call nciorv(filename,fid,"analysis_error",src_sst_err) call nciocl(filename,fid) else Write(*,*) "AVHRR SST file not present" return endif else Write(*,*) "AVHRR SST file not present" return endif nsst=0 do j=1,src_ny do i=1,src_nx if(src_sst(i,j)>-32768.0) then nsst=nsst+1 endif enddo enddo allocate(psst_lon(nsst)) allocate(psst_lat(nsst)) allocate(psst_sst(nsst)) allocate(psst_err(nsst)) nsst=0 do j=1,src_ny,2 do i=1,src_nx,2 if(src_sst(i,j)>-32768.0) then nsst=nsst+1 psst_lon(nsst)=src_lon(i) psst_lat(nsst)=src_lat(j) psst_sst(nsst)=src_sst(i,j)*0.01 endif enddo enddo !call write_tsis_pobs_sst(cdtg,nsst,psst_lon,psst_lat,psst_sst,psst_err) !where(src_sst>-32768.) ! scale values !where(src_sst>-999.) src_sst=0.01*src_sst src_sst_err=0.01*src_sst_err !else where ! src_sst=-999. ! src_sst_err=-999. !endwhere nf=1 npass=0 iw=0 do while(npass<50) npass=npass+1 lmask=.true. WHERE (src_sst(:,:)>-2) iw=1 !print *, "Executing pass no: ", npass, sum(iw) WHERE (iw == 0 ) lmask=.false. DO j=1,src_ny jjf=j-nf ; jjl =j+nf jjf=MAX(1,jjf) ; jjl=MIN(src_ny,jjl) DO i=1,src_nx iif=i-nf ; iil=i+nf iif=MAX(1,iif) ; iil=MIN(src_nx,iil) den=SUM(iw(iif:iil,jjf:jjl) ) IF ( den /= 0 .and. iw(i,j)==0 ) THEN src_sst(i,j)= SUM(src_sst(iif:iil,jjf:jjl), mask=lmask(iif:iil,jjf:jjl) )/den src_sst_err(i,j)= SUM(src_sst_err(iif:iil,jjf:jjl), mask=lmask(iif:iil,jjf:jjl) )/den ENDIF END DO END DO enddo !where(src_sst<-5.0) ! src_sst=-2.0 ! src_sst_err=2.0 !end where call ifld(src_nx,src_ny,nx,ny,src_lon,src_lat,src_sst,src_sst_err,dst_sst,dst_sst_err) ! clean up write(*,*) "SST min, max: ", minval(dst_sst), maxval(dst_sst) write(*,*) "SST err min, max: ",minval(dst_sst_err), maxval(dst_sst_err) where(mdepth>=2.00**100) dst_sst=2.00**100 dst_sst_err=2.00**100 end where where(dst_sst_err<0.0) dst_sst_err=2.0 !fname="tsis_obs_"//cdtg//".nc" fname=trim(tsis_obs_location)//"tsis_obs_"//trim(pfx)//"_"//cdtg//".nc" call nciopn(fname,fid) call nciowv(fname,fid,"sst",dst_sst) call nciowv(fname,fid,"sst_err",dst_sst_err) call nciorv(fname,fid,"ob_grp_present",ob_grp_present) ob_grp_present(3)=1 call nciowv(fname,fid,"ob_grp_present",ob_grp_present) call nciocl(fname,fid) end subroutine end module mavhrr