c c------------------------------------------------------------------ c Begin file /home/sting/foster/timescdf/mkcdf.f c------------------------------------------------------------------ c subroutine mkcdf(path,pnttime) c c Make netcdf file from current history: c (file made will be path) c include 'tgcmhdr.h' include 'timescdf.h' include '/usr/local/include/netcdf.inc' integer iret dimension iddims(3),idvars(nfhist),istart3(3),idim3(3), + mdmhmm(3),hpcpby(3) dimension pnttime(imx,kmx,jmx,nfhist) data istart3/1,1,1/ character*(*) path character*40 histlab c character*24 histmss c c netCDF id integer cdfid c c variable shapes integer latdims(1), londims(1), izpdims(1) c write(6,"(' ')") write(6,"('Enter mkcdf: path=',a)") path c c enter define mode cdfid = nccre (path, NCCLOB, iret) c c define dimensions (returns dimension id's): latdim = ncddef(cdfid, "lat", jmx, iret) londim = ncddef(cdfid, "lon", imx, iret) izpdim = ncddef(cdfid, "izp", kmx, iret) c c define dimension variables c (5th arg is list of dimension id's from ncddef): c c latitudes: latdims(1) = latdim latid = ncvdef (cdfid, "lat", NCFLOAT, 1, latdims, iret) c c longitudes: londims(1) = londim lonid = ncvdef (cdfid, "lon", NCFLOAT, 1, londims, iret) c c pressures: izpdims(1) = izpdim izpid = ncvdef (cdfid, "zp", NCFLOAT, 1, izpdims, iret) c c Define field variables: c iddims(1) = londim iddims(2) = izpdim iddims(3) = latdim do 100 ip=1,nfhist idvars(ip) = ncvdef(cdfid,timeslab_short(ip),NCFLOAT, + 3,iddims,ier) if (ier.ne.0) then write(6,"('mkcdf error from ncvdef: ier=',i4,' ip=',i4)") + ier,ip stop 'ncvdef' endif 100 continue c c Assign global attributes for file: c c History volume name: c do i=1,3 c histmss((i-1)*8+1:(i-1)*8+8) = histvol(i,ivol) c enddo write(6,"('mkcdf: history volume=',a)") histvol(ivol) call ncaptc(cdfid,NCGLOBAL,'histvol',NCCHAR,24,histvol(ivol),ier) if (ier.ne.0) then write(6,"('mkcdf error ',i3,' from ncaptc (global attribute', + ' history volume')") ier stop 'ncpatc' endif c c History label: do i=1,5 histlab((i-1)*8+1:(i-1)*8+8) = label(i) enddo write(6,"('mkcdf: histlab=',a)") histlab call ncaptc(cdfid,NCGLOBAL,'label',NCCHAR,40,histlab,ier) if (ier.ne.0) then write(6,"('mkcdf error ',i3,' from ncaptc (global attribute', + ' history label')") ier stop 'ncpatc' endif c c Model day, hour, minute: mdmhmm(1) = nday mdmhmm(2) = nhr mdmhmm(3) = nmin write(6,"('mkcdf: md:mh:mm=',i2,':',i2,':',i2)") mdmhmm call ncapt(cdfid,NCGLOBAL,'md:mh:mm',NCSHORT,3,mdmhmm,ier) if (ier.ne.0) then write(6,"('mkcdf error ',i3,' from ncaptc (global attribute', + ' md:mh:mm')") ier stop 'ncpatc' endif c c Hp,cp,by: hpcpby(1) = hp hpcpby(2) = cp hpcpby(3) = byimf write(6,"('mkcdf: hp,cp,by=',3f10.2)") hpcpby call ncapt(cdfid,NCGLOBAL,'hp,cp,by',NCFLOAT,3,hpcpby,ier) if (ier.ne.0) then write(6,"('mkcdf error ',i3,' from ncaptc (global attribute', + ' hp,cp,by')") ier stop 'ncpatc' endif c c Assign attributes to variables (long name): c do 110 ip=1,nfhist c lenlab = lenstr(timeslab(ip)) c call ncaptc(cdfid,idvars(ip),"long_name",NCCHAR,lenlab, c + timeslab(ip)(1:lenlab),ier) c write(6,"('mkcdf: ip=',i3,' lenlab=',i3,' timeslab(ip)=', c + a)") ip,lenlab,timeslab(ip) c if (ier.ne.0) then c write(6,"('mkcdf error from ncaptc: ier=',i4,' ip=',i4)") c + ier,ip c stop 'ncaptc' c endif c110 continue c c Leave define mode: call ncendf (cdfid, iret) c c Give values to variables: c idim3(1) = imx idim3(2) = kmx idim3(3) = jmx c c Dimension variables: call ncvpt(cdfid,lonid,1,imx,gcmlon,ier) call ncvpt(cdfid,latid,1,jmx,gcmlat,ier) call ncvpt(cdfid,izpid,1,kmx,gcmzp,ier) if (ier.ne.0) then write(6,"('mkcdf error ',i3,' from ncvpt (values to dimension', + ' variables')") ier stop 'ncvpt' endif c c Field variables: do 120 ip=1,nfhist call ncvpt(cdfid,idvars(ip),istart3,idim3,pnttime(1,1,1,ip), + ier) if (ier.ne.0) then write(6,"('mkcdf error from ncvpt: ier=',i4,' ip=',i4)") + ier,ip stop 'ncvpt' endif 120 continue c c Close netcdf: call ncclos (cdfid) write(6,"('mkcdf: wrote netcdf file ',a)") path return end