pro ncdf_waccm_read,filename,lon,lat,lev3D,time,nx,ny,nz,nt,ncnst,CNST_VMR=vmr_cnst,$ CNST_NAME=name_cnst,XWind=un,YWind=vn,ZWind=om,TEMP=tn,GEOPTH=zg,CHEMPH=qcp,SWH=qrs,$ JOULEH=qj,XTGW=utgw, YTGW=vtgw, XTOW=utow, YTOW=vtow, TTend=ttgw, QRS=qs, QRL=ql Id = NCDF_OPEN(filename) ;; Coordinates ncdf_varget, Id, 'lon', lon ncdf_varget, Id, 'lat', lat ncdf_varget, Id, 'lev', lev ncdf_varget, Id, 'time', time nx=n_elements(lon) ny=n_elements(lat) nz=n_elements(lev) nt=n_elements(time) ; ; Need to convert to pressure from hybrid pressure(lev input variable) ; NCDF_VARGET,iD,'hyam',hyam NCDF_VARGET,iD,'hybm',hybm NCDF_VARGET,iD,'P0',p0 NCDF_VARGET,iD,'PS',pS lev3D = FLTARR(nZ,nY,nX) FOR iLt=0,nY-1 DO BEGIN FOR iLn=0,nX-1 DO BEGIN FOR iT=0,nT-1 DO BEGIN lev3D[*,iLt,iLn] = hyam[*]*p0 + hybm[*]*pS[iLn,iLt,iT] ENDFOR ENDFOR ENDFOR ;; Field variables IF (N_Elements(vmr_cnst) NE 0) OR (Arg_Present(vmr_cnst)) THEN BEGIN ncnst = 22 vmr_cnst=fltarr(nx,ny,nz,nt,ncnst) name_cnst=strarr(ncnst) name_cnst(0)='O' name_cnst(1)='O2' name_cnst(2)='O3' name_cnst(3)='NO' name_cnst(4)='NO2' name_cnst(5)='CO' name_cnst(6)='CO2' name_cnst(7)='H' name_cnst(8)='H2O' name_cnst(9)='HO2' name_cnst(10)='OH' name_cnst(11)='Op' name_cnst(12)='O2p' name_cnst(13)='Np' name_cnst(14)='N2p' name_cnst(15)='NOp' name_cnst(16)='e' name_cnst(17)='O1D' name_cnst(18)='O2_1D' name_cnst(19)='O2_1S' name_cnst(20)='H2' name_cnst(21)='CH4' for i=0,ncnst-1 do begin NCDF_VARGET, Id, name_cnst(i), vmrtmp vmr_cnst(*,*,*,*,i)=vmrtmp endfor ENDIF IF (N_Elements(zg) NE 0) OR (Arg_Present(zg)) THEN $ NCDF_VARGET, Id, 'Z3',zg IF (N_Elements(tn) NE 0) OR (Arg_Present(tn)) THEN $ NCDF_VARGET, Id, 'T', tn IF (N_Elements(un) NE 0) OR (Arg_Present(un)) THEN $ NCDF_VARGET, Id, 'U', un IF (N_Elements(vn) NE 0) OR (Arg_Present(vn)) THEN $ NCDF_VARGET, Id, 'V', vn IF (N_Elements(om) NE 0) OR (Arg_Present(om)) THEN $ NCDF_VARGET, Id, 'OMEGA', om IF (N_Elements(qcp) NE 0) OR (Arg_Present(qcp)) THEN $ NCDF_VARGET, Id, 'QCP', qcp IF (N_Elements(qrs) NE 0) OR (Arg_Present(qrs)) THEN $ NCDF_VARGET, Id, 'QRS_TOT', qrs IF (N_Elements(qj) NE 0) OR (Arg_Present(qj)) THEN $ NCDF_VARGET, Id, 'QJOULE', qj IF (N_Elements(utgw) NE 0) OR (Arg_Present(utgw)) THEN $ NCDF_VARGET, Id, 'UTGWSPEC', utgw IF (N_Elements(vtgw) NE 0) OR (Arg_Present(vtgw)) THEN $ NCDF_VARGET, Id, 'VTGWSPEC', vtgw IF (N_Elements(utow) NE 0) OR (Arg_Present(utow)) THEN $ NCDF_VARGET, Id, 'UTGWORO', utow IF (N_Elements(vtow) NE 0) OR (Arg_Present(vtow)) THEN $ NCDF_VARGET, Id, 'VTGWORO', vtow IF (N_Elements(qs) NE 0) OR (Arg_Present(qs)) THEN $ NCDF_VARGET, Id, 'QRS_TOT', qs IF (N_Elements(ql) NE 0) OR (Arg_Present(ql)) THEN $ NCDF_VARGET, Id, 'QRL_TOT', ql NCDF_CLOSE, Id return END