!***************************************************************! ! ! ! This Program read the map,prof & diagSR files in ! ! order to calculate coordinates across a transect ! ! ! ! ifort transect.f90 -o transect.e ! ! ! !***************************************************************! program goccp_2_claudia !implicit none use netcdf implicit none character :: list*25, Map*200,Mapout*200, file6*200,file8*200,file9*25, Map2*200, Map3*200 character :: home*100,yearc*4,GCM*4, grid*6, day*15, vname*4, date*6, dtime*9 integer :: err, i, ilat, ilon, nb, year, nbtot, ihist integer :: ncid,varid integer :: dimidsm(3),dimidsm2(4) integer :: date1, date2, resh integer :: interdat integer,parameter :: npts = 13, pas_lat = 3, pas_lon = 4 integer,parameter :: lon1=-125, lat1=35 integer,parameter :: latmax=180, lonmax=360, nmonth=12,histmax=10,histmax2=40 real,parameter :: nan=-999, nan2=-999 real*4 :: x,y real*4 :: lat(latmax), lon(lonmax), resd(1) real*4,dimension(lonmax,latmax) :: monthlow,monthmid,monthhigh real*4,dimension(lonmax,latmax) :: monthcolcloud,monthcolclear real*4,dimension(lonmax,latmax) :: ntot,nret,nretl,nretm,nreth real,dimension(lonmax) :: lonmod real,dimension(latmax) :: latmod ! real*4,dimension(lonmax-1) :: lonmod2 ! real*4,dimension(latmax-1) :: latmod2 real*4,dimension(lonmax,latmax,nmonth) :: yearisccplow,yearisccpmid,yearisccphigh,yearcolcloud, yearcolclear real*4,dimension(lonmax,latmax,nmonth) :: yearisccplow2,yearisccpmid2,yearisccphigh2,yearcolcloud2, yearcolclear2 real*4,dimension(lonmax,latmax,nmonth) :: yearisccplow3,yearisccpmid3,yearisccphigh3,yearcolcloud3, yearcolclear3 real*4,dimension(lonmax,latmax,nmonth) :: yearntot, yearnret, yearnretl, yearnretm, yearnreth real*4,dimension(lonmax,latmax,nmonth) :: yearntot2, yearnret2, yearnretl2, yearnretm2, yearnreth2 real*4,dimension(lonmax,latmax,nmonth) :: yearntot3, yearnret3, yearnretl3, yearnretm3, yearnreth3 real*4,dimension(lonmax,latmax) :: ntotmoy,nretmoy,yearcolmoy,sd,sdcol,colmoy real*4,dimension(lonmax,latmax) :: ntotmoy2,nretmoy2,yearcolmoy2,sd2,sdcol2,colmoy2 real*4,dimension(lonmax,latmax) :: ntotmoy3,nretmoy3,yearcolmoy3,sd3,sdcol3,colmoy3 real*4,dimension(lonmax,latmax) :: nretlmoy,yearlowmoy,sdl,sdlow,lowmoy, nretlmoy2,yearlowmoy2,sdl2,sdlow2,lowmoy2, nretlmoy3,yearlowmoy3,sdl3,sdlow3,lowmoy3 real*4,dimension(lonmax,latmax) :: nretmmoy,yearmidmoy,sdm,sdmid,midmoy, nretmmoy2,yearmidmoy2,sdm2,sdmid2,midmoy2, nretmmoy3,yearmidmoy3,sdm3,sdmid3,midmoy3 real*4,dimension(lonmax,latmax) :: nrethmoy,yearhighmoy,sdh,sdhigh,highmoy, nrethmoy2,yearhighmoy2,sdh2,sdhigh2,highmoy2, nrethmoy3,yearhighmoy3,sdh3,sdhigh3,highmoy3 integer,dimension(lonmax,latmax) :: indcol,indcol2,indcol3, indlow,indlow2,indlow3, indmid,indmid2,indmid3, indhigh, indhigh2, indhigh3 real*4,dimension(lonmax,latmax,histmax) :: monthhlow,monthhlow2,monthhlow3 integer,dimension(lonmax,latmax,histmax) :: monthhmid,monthhmid2,monthhmid3 integer,dimension(lonmax,latmax,histmax) :: monthhhigh,monthhhigh2,monthhhigh3 integer,dimension(lonmax,latmax,histmax) :: monthhcol,monthhcol2,monthhcol3 integer,dimension(lonmax,latmax,histmax2) :: monthhcz,monthhcz2,monthhcz3 real*4,dimension(lonmax,latmax,histmax,nmonth) :: yearhlow,yearhlow2,yearhlow3 real*4,dimension(lonmax,latmax,histmax,nmonth) :: yearhmid,yearhmid2,yearhmid3 real*4,dimension(lonmax,latmax,histmax,nmonth) :: yearhhigh,yearhhigh2,yearhhigh3 real*4,dimension(lonmax,latmax,histmax,nmonth) :: yearhcol,yearhcol2,yearhcol3 real*4,dimension(lonmax,latmax,histmax2,nmonth) :: yearhcz, yearhcz2,yearhcz3 real*4,dimension(lonmax,latmax) :: monthflow,monthflow2,monthflow3 real*4,dimension(lonmax,latmax,nmonth) :: yearflow,yearflow2,yearflow3 !real,dimension(lonmax,latmax) :: ntot do write (*,'(a)',advance='no') 'input varname = ' read *, vname if (err==0) exit print *,'--- input file not found' enddo ! Open input data file do write (*,'(a)',advance='no') 'input List file name = ' read *, list open(unit=10,file=list,iostat=err) if (err==0) exit print *,'--- input file not found' enddo nb=0 print *, 'initialisation' monthcolcloud(:,:)=0; yearisccplow(:,:,:)=0;yearisccpmid(:,:,:)=0;yearisccphigh(:,:,:)=0; yearcolcloud(:,:,:)=0;yearcolclear(:,:,:)=0; yearisccplow2(:,:,:)=0;yearisccpmid2(:,:,:)=0;yearisccphigh2(:,:,:)=0; yearcolcloud2(:,:,:)=0;yearcolclear2(:,:,:)=0; yearisccplow3(:,:,:)=0;yearisccpmid3(:,:,:)=0;yearisccphigh3(:,:,:)=0; yearcolcloud3(:,:,:)=0;yearcolclear3(:,:,:)=0; yearnret(:,:,:)=0; yearntot(:,:,:)=0; yearcolmoy(:,:)=0;colmoy(:,:)=0 indcol(:,:)=0; ntotmoy(:,:)=0; nretmoy(:,:)=0; sd(:,:)=0; sdcol(:,:)=0 yearnret2(:,:,:)=0; yearntot2(:,:,:)=0; yearcolmoy2(:,:)=0;colmoy2(:,:)=0 indcol2(:,:)=0; ntotmoy2(:,:)=0; nretmoy2(:,:)=0; sd2(:,:)=0; sdcol2(:,:)=0 yearnret3(:,:,:)=0; yearntot3(:,:,:)=0; yearcolmoy3(:,:)=0; colmoy3(:,:)=0 indcol3(:,:)=0; ntotmoy3(:,:)=0; nretmoy3(:,:)=0; sd3(:,:)=0; sdcol3(:,:)=0 yearhlow(:,:,:,:)=0;yearhlow2(:,:,:,:)=0;yearhlow3(:,:,:,:)=0; !!$yearhmid(:,:,:,:)=0;yearhmid2(:,:,:,:)=0;yearhmid3(:,:,:,:)=0; !!$yearhhigh(:,:,:,:)=0;yearhhigh2(:,:,:,:)=0;yearhhigh3(:,:,:,:)=0; !!$yearhcol(:,:,:)=0;yearhcol2(:,:,:,:)=0;yearhcol3(:,:,:,:)=0; !!$yearhcz(:,:,:,:)=0; yearhcz2(:,:,:,:)=0;yearhcz3(:,:,:,:)=0; !!$ yearflow(:,:,:)=0;yearflow2(:,:,:)=0;yearflow3(:,:,:)=0; !!$yearfmid(:,:,:)=0;yearfmid2(:,:,:)=0;yearfmid3(:,:,:)=0; !!$yearfhigh(:,:,:)=0;yearfhigh2(:,:,:)=0;yearfhigh3(:,:,:)=0; !!$yearfcol(:,:,:)=0;yearfcol2(:,:,:)=0;yearfcol3(:,:,:)=0; !!$yearfcz(:,:,:)=0; yearfcz2(:,:,:)=0;yearfcz3(:,:,:)=0; print *, 'lecture' 888 read(10,*,end=999)nb,date home='/bdd/CFMIP/CFMIP_OBS_LOCAL/Goccp_GEWEX/mensuel/' yearc=date(1:4) print *, yearc file6='MapLowMidHigh330m_'//date//'_night_CFMIP1_sat_3.1.2nol_gewex.nc' Map=trim(file6) ! READING THE FILE print *, 'lecture grille lat lon' call rdparam(trim(home)//yearc//'/'//Map,lonmod,'longitude',lonmax) call rdparam(trim(home)//yearc//'/'//Map,latmod,'latitude',latmax) print *, nb,trim(file6) print *, 'lecture fichiers nc 0130AM' monthlow(:,:)=0; ntot(:,:)=0; monthflow(:,:)=0; monthhlow(:,:,:)=0;! nretl(:,:)=0; call rdnc2(Map,monthlow,'a_'//vname) print *, 'test' call rdnc2(Map,ntot,'n_tot') print *, 'test2' call rdnc2(Map,monthflow,'f_'//vname) print *, 'test3' call rdnc3(Map,monthhlow,'h_'//vname) print *, 'test4' !call rdnc2(Map,nretl,'s_'//vname) call rdnc2(Map,monthcolcloud,'a_CA') yearcolcloud(:,:,nb)=monthcolcloud; yearisccplow(:,:,nb)=monthlow; yearntot(:,:,nb)=ntot; yearflow(:,:,nb)=monthflow; yearhlow(:,:,:,nb)=monthhlow ! yearnretl(:,:,nb)=nretl; print *, 'lecture fichiers nc 0130PM' file6='MapLowMidHigh330m_'//date//'_day_CFMIP1_sat_3.1.2nol_gewex.nc' Map2=trim(file6) print *, Map2 monthlow(:,:)=0; ntot(:,:)=0; monthflow(:,:)=0; monthhlow(:,:,:)=0;! nretl(:,:)=0; call rdnc2(Map2,monthlow,'a_'//vname) call rdnc2(Map2,ntot,'n_tot') call rdnc2(Map2,monthflow,'f_'//vname) call rdnc3(Map2,monthhlow,'h_'//vname) !call rdnc2(Map2,nretl,'s_'//vname) call rdnc2(Map2,monthcolcloud,'a_CA') yearcolcloud2(:,:,nb)=monthcolcloud; yearisccplow2(:,:,nb)=monthlow; yearntot2(:,:,nb)=ntot; yearflow2(:,:,nb)=monthflow; yearhlow2(:,:,:,nb)=monthhlow !! yearnretl2(:,:,nb)=nretl; print *, 'lecture fichiers nc 0130AMPM' Map3=trim(vname)//'_CALIPSO-GOCCP_ATRAIN_0130AMPM_'//date//'.nc' print *, Map3 yearisccpmid(:,:,nb)=yearisccplow(:,:,nb) yearisccpmid2(:,:,nb)=yearisccplow2(:,:,nb) do ilon=1,lonmax do ilat=1,latmax if( yearisccplow(ilon,ilat,nb).gt.0. )then yearisccpmid(ilon,ilat,nb)=100*yearisccplow(ilon,ilat,nb)/yearcolcloud(ilon,ilat,nb) endif if( yearisccplow2(ilon,ilat,nb).gt.0. )then yearisccpmid2(ilon,ilat,nb)=100*yearisccplow2(ilon,ilat,nb)/yearcolcloud2(ilon,ilat,nb) endif ! avg of low cloud if( yearisccplow(ilon,ilat,nb).ne.nan)then if( yearisccplow2(ilon,ilat,nb).ne.nan)then yearisccplow3(ilon,ilat,nb)=( yearisccplow(ilon,ilat,nb)+ yearisccplow2(ilon,ilat,nb))/2 yearisccpmid3(ilon,ilat,nb)=( yearisccpmid(ilon,ilat,nb)+ yearisccpmid2(ilon,ilat,nb))/2 ! yearcolcloud3(ilon,ilat,nb)=( yearcolcloud(ilon,ilat,nb)+ yearcolcloud2(ilon,ilat,nb))/2 else yearisccplow3(ilon,ilat,nb)= yearisccplow(ilon,ilat,nb) yearisccpmid3(ilon,ilat,nb)= yearisccpmid(ilon,ilat,nb) ! yearcolcloud3(ilon,ilat,nb)= yearcolcloud(ilon,ilat,nb) ! endif elseif( yearisccplow2(ilon,ilat,nb).ne.nan)then yearisccplow3(ilon,ilat,nb)= yearisccplow2(ilon,ilat,nb) yearisccpmid3(ilon,ilat,nb)= yearisccpmid2(ilon,ilat,nb) ! yearcolcloud3(ilon,ilat,nb)= yearcolcloud2(ilon,ilat,nb) else yearisccplow3(ilon,ilat,nb)=nan yearisccpmid3(ilon,ilat,nb)=nan ! yearcolcloud3(ilon,ilat,nb)=nan endif if( yearntot(ilon,ilat,nb).ne.nan)then if( yearntot2(ilon,ilat,nb).ne.nan)then yearntot3(ilon,ilat,nb)= yearntot(ilon,ilat,nb)+ yearntot2(ilon,ilat,nb) else yearntot3(ilon,ilat,nb)= yearntot(ilon,ilat,nb) endif elseif( yearntot2(ilon,ilat,nb).ne.nan)then yearntot3(ilon,ilat,nb)= yearntot2(ilon,ilat,nb) else yearntot3(ilon,ilat,nb)=nan endif do ihist=1,histmax if( yearhlow(ilon,ilat,ihist,nb).ne.nan)then if( yearhlow2(ilon,ilat,ihist,nb).ne.nan)then yearhlow3(ilon,ilat,ihist,nb)= yearhlow(ilon,ilat,ihist,nb)+ yearhlow2(ilon,ilat,ihist,nb) else yearhlow3(ilon,ilat,ihist,nb)= yearhlow(ilon,ilat,ihist,nb) endif elseif( yearhlow2(ilon,ilat,ihist,nb).ne.nan)then yearhlow3(ilon,ilat,ihist,nb)= yearhlow2(ilon,ilat,ihist,nb) else yearhlow3(ilon,ilat,ihist,nb)=nan endif enddo if( yearisccplow3(ilon,ilat,nb).eq.0.)then yearflow3(ilon,ilat,nb)=0 elseif(yearisccplow3(ilon,ilat,nb).gt.0.)then yearflow3(ilon,ilat,nb)=100 elseif(yearisccplow3(ilon,ilat,nb).lt.0.)then yearflow3(ilon,ilat,nb)=nan endif enddo enddo !!$yearisccpmid3(:,:,nb)=yearisccplow3(:,:,nb); !!$ !!$ do ilon=1,lonmax !!$ do ilat=1,latmax !!$ !!$ if( yearisccplow3(ilon,ilat,nb).gt.0. )then !!$ yearisccpmid3(ilon,ilat,nb)=100*yearisccplow3(ilon,ilat,nb)/yearcolcloud3(ilon,ilat,nb) !!$ endif !!$ !!$ !!$ enddo !!$ enddo print *, 'goto 888' goto 888 999 continue print *, '999 continue' ! Cloud Amount Total file dtime=date(1:4) file8=trim(vname)//'R_CALIPSO-GOCCP_ATRAIN_0130AMPM_'//date(1:4)//'.nc' ! name of output ncdf map file call create_mapnc(file8,file9,vname,lonmod,latmod,dtime,dimidsm,dimidsm2,lonmax,latmax,trim(day)) SELECT CASE (vname) CASE ("CAL") call map_recvar2nc3(yearisccpmid3,'CALR','Cloud Amount, Low/CA',yearntot3,yearflow3,yearhlow3,dimidsm,dimidsm2,file8,lonmax,latmax,trim(day)) CASE ("CAM") call map_recvar2nc3(yearisccpmid3,'CAMR','Cloud Amount, Mid/CA',yearntot3,yearflow3,yearhlow3,dimidsm,dimidsm2,file8,lonmax,latmax,trim(day)) CASE ("CAH") call map_recvar2nc3(yearisccpmid3,'CAHR','Cloud Amount, High/CA',yearntot3,yearflow3,yearhlow3,dimidsm,dimidsm2,file8,lonmax,latmax,trim(day)) end select dtime=date(1:4) file8=trim(vname)//'R_CALIPSO-GOCCP_ATRAIN_0130PM_'//date(1:4)//'.nc' ! name of output ncdf map file call create_mapnc(file8,file9,vname,lonmod,latmod,dtime,dimidsm,dimidsm2,lonmax,latmax,trim(day)) SELECT CASE (vname) CASE ("CAL") call map_recvar2nc3(yearisccpmid2,'CALR','Cloud Amount, Low/CA',yearntot2,yearflow2,yearhlow2,dimidsm,dimidsm2,file8,lonmax,latmax,trim(day)) CASE ("CAM") call map_recvar2nc3(yearisccpmid2,'CAMR','Cloud Amount, Mid/CA',yearntot2,yearflow2,yearhlow2,dimidsm,dimidsm2,file8,lonmax,latmax,trim(day)) CASE ("CAH") call map_recvar2nc3(yearisccpmid2,'CAHR','Cloud Amount, High/CA',yearntot2,yearflow2,yearhlow2,dimidsm,dimidsm2,file8,lonmax,latmax,trim(day)) end select dtime=date(1:4) file8=trim(vname)//'R_CALIPSO-GOCCP_ATRAIN_0130AM_'//date(1:4)//'.nc' ! name of output ncdf map file call create_mapnc(file8,file9,vname,lonmod,latmod,dtime,dimidsm,dimidsm2,lonmax,latmax,trim(day)) SELECT CASE (vname) CASE ("CAL") call map_recvar2nc3(yearisccpmid,'CALR','Cloud Amount, Low/CA',yearntot,yearflow,yearhlow,dimidsm,dimidsm2,file8,lonmax,latmax,trim(day)) CASE ("CAM") call map_recvar2nc3(yearisccpmid,'CAMR','Cloud Amount, Mid/CA',yearntot,yearflow,yearhlow,dimidsm,dimidsm2,file8,lonmax,latmax,trim(day)) CASE ("CAH") call map_recvar2nc3(yearisccpmid,'CAHR','Cloud Amount, High/CA',yearntot,yearflow,yearhlow,dimidsm,dimidsm2,file8,lonmax,latmax,trim(day)) end select print *, 'End of program' !888 continue 100 format(10(f11.3,1x)) 101 format(6(f11.2,1x)) 102 format(3(f8.3,1x),2(1x,e13.6)) !110 format(I2,A200) close(10) close(11) close(12) contains subroutine check(status) implicit none include 'netcdf.inc' integer, intent ( in) :: status if(status /= nf90_noerr) then print *, trim(nf90_strerror(status)) stop "Stopped" end if end subroutine check subroutine rdparam(fname,var,nvar,nparam) !call rdnc(diagSR,monthcloudfract,'toto',srmod,'srmod',1,1,1,15) !use netcdf implicit none character(len=*) :: nvar, fname integer :: ncid,varid,nparam integer :: x,y,z,d real*4,dimension(nparam) :: var !call rdnc(monthcloudfract,'toto',lat,'lat',1,1,1,72) print *, nvar call check(NF90_OPEN(fname,NF90_NOWRITE,ncid)) call check(NF90_inq_varid(ncid,nvar,varid)) call check(NF90_get_var(ncid,varid,var)) call check(NF90_CLOSE(ncid)) end subroutine rdparam subroutine rdnc(fname,var,nvar,var2,nvar2,x,y,z,d) !call rdnc(diagSR,monthcloudfract,'toto',srmod,'srmod',1,1,1,15) ! use netcdf implicit none character(len=*) :: nvar, nvar2,fname integer :: ncid,varid integer :: x,y,z,d real*4,dimension(y,x,z) :: var real*4,dimension(d) :: var2 !call rdnc(monthcloudfract,'toto',lat,'lat',1,1,1,72) if ( d.eq.0)then print *, nvar call check(NF90_OPEN(fname,NF90_NOWRITE,ncid)) call check(NF90_inq_varid(ncid,nvar,varid)) call check(NF90_get_var(ncid,varid,var)) call check(NF90_CLOSE(ncid)) else print *, nvar2 call check(NF90_OPEN(fname,NF90_NOWRITE,ncid)) call check(NF90_inq_varid(ncid,nvar2,varid)) call check(NF90_get_var(ncid,varid,var2)) call check(NF90_CLOSE(ncid)) endif end subroutine rdnc subroutine rdnc2(fname,var,nvar) ! use netcdf implicit none character(len=*) :: nvar, fname character :: fname2*200 integer :: ncid,varid integer,parameter :: lat=180, lon=360 real*4,dimension(lon,lat) :: var !call rdnc(monthcloudfract,'toto',72,96) print *, nvar fname2=trim(home)//yearc//'/'//trim(fname) print *, fname2 call check(NF90_OPEN(trim(fname2),NF90_NOWRITE,ncid)) call check(NF90_inq_varid(ncid,nvar,varid)) call check(NF90_get_var(ncid,varid,var)) call check(NF90_CLOSE(ncid)) end subroutine rdnc2 subroutine rdnc3(fname,var,nvar) ! use netcdf implicit none character(len=*) :: nvar, fname character :: fname2*200 integer :: ncid,varid integer,parameter :: lat=180, lon=360, hist=10 real*4,dimension(lon,lat,hist) :: var !call rdnc(monthcloudfract,'toto',72,96) print *, nvar fname2=trim(home)//yearc//'/'//trim(fname) print *, fname2 call check(NF90_OPEN(trim(fname2),NF90_NOWRITE,ncid)) call check(NF90_inq_varid(ncid,nvar,varid)) call check(NF90_get_var(ncid,varid,var)) call check(NF90_CLOSE(ncid)) end subroutine rdnc3 !----------------------------------------------------------------------------! ! *** CREATE_MAPNC *** This routine create a netcdf map file, and its ! ! dimensions ! !----------------------------------------------------------------------------! ! fname : name of output netcdf MapLowMidHigh file ! ! dname : period of MapLowMidHigh file (description of ncdf file) ! ! grid : name of the grid selected (cfmip/lmdz/nasa) ! ! nlon : number of the longitude boxes ! ! nlat : number of the latitude boxes ! ! vlon : values of model longitude from 180 to -180 ! ! vlat : values of model latitude from 90 to -90 ! ! vtime : number of days since 2000/01/01 for the trimonthly perdiod, ! ! in day. ! ! dim : dimension id of the MaPLowMidHigh var recorded in the ncdf ! !----------------------------------------------------------------------------! ! toplvl : values of isccp top levels ! ! files ! ! ndims : dimension of dim (=3 : lon,lat,time) ! ! nc_id : netcdf file id ! ! lon_varid : variable id of longitude ! ! lat_varid : variable id of latitude ! ! pres_varid : variable id of toplvl ! ! time_varid : variable id of time ! ! lon_dimid : dimension id of longitude ! ! lat_dimid : dimension id of latitude ! ! pres_dimid : dimension id of toplvl ! ! time_dimid : dimension id of time ! ! date : date from the real-system clock and has form yyyymmdd. ! ! time : time from the real-system clock and has form hhmmss.sss. ! ! zone : represente the difference with respect to Coordinated ! ! Universal Time (UTC), and has form (+-)hhmm. ! ! value : 8 dimension value which contains the year,month,day,hour, ! ! minute, seconds and milliseconds of the real-time. ! !----------------------------------------------------------------------------! ! ! ! ex : create_mapnc(file8,file9,lonmod,latmod,resd,dimidsm,gcm,lonmax,latmax)! ! ! !----------------------------------------------------------------------------! subroutine create_mapnc(fname,dname,nvar,vlon,vlat,vtime,dim,dim2,nlon,nlat,vday) implicit none include 'netcdf.inc' character(LEN=*) :: fname,dname,vday,nvar character :: date*8,time*10,zone*5 integer, parameter :: ndims = 3, ndims2 = 4,binnv=2 integer,dimension(8) :: value integer :: nlon , nlat,dim(ndims), dim2(ndims2),i,dim3(2),bin integer :: lon_varid,lat_varid,pres_varid, time_varid,nc_id,bin_varid,nv_varid,bin2_varid integer :: lon_dimid,lat_dimid,pres_dimid,time_dimid, bin_dimid,nv_dimid,bin2_dimid character :: vtime*4 real*4 :: tim(12) = (/1.,2.,3.,4.,5.,6.,7.,8.,9.,10.,11.,12./) ! real*4 :: tim(1) real, dimension(nlon) :: vlon real, dimension(nlat) :: vlat real, dimension(:), allocatable :: vbin real, dimension(:,:), allocatable :: vbin_bounds if(nvar(1:2).eq.'CT')then bin=28 elseif(nvar(1:2).eq.'CZ')then bin=40 else bin=10 endif allocate(vbin(bin),vbin_bounds(binnv,bin)) vbin(:)=0; vbin_bounds(:,:)=0; open(17,file='/users/gcesana/grilles_lmdz/bin_'//nvar(1:2)) do i=1,bin read(17,*)vbin(i) enddo close(17) open(18,file='/users/gcesana/grilles_lmdz/bin_bounds_'//nvar(1:2)) do i=1,bin print *, i read(18,*)vbin_bounds(1:2,i)!,vbin_bounds(2,i) enddo close(18) call date_and_time(date,time,zone,value) call check(nf90_create('/bdd/CFMIP/GOCCP/temp/'//fname, NF90_CLOBBER, & nc_id)) call check(nf90_put_att(nc_id, NF90_GLOBAL, 'Description','CALIPSO-GOCCP Products')) call check(nf90_put_att(nc_id, NF90_GLOBAL, 'Satellite','CALIPSO (Caliop)')) call check(nf90_put_att(nc_id, NF90_GLOBAL, 'Grid_resolution','1 x 1 deg')) call check(nf90_put_att(nc_id, NF90_GLOBAL, 'Date',trim(vtime))) call check(nf90_put_att(nc_id, NF90_GLOBAL, 'Author', & 'Greg CESANA (Columbia University), Helene CHEPFER (LMD/IPSL)')) call check(nf90_put_att(nc_id, NF90_GLOBAL, 'Scientific_contact', & 'chepfer@lmd.polytechnique.fr; gregory.cesana@columbia.edu')) call check(nf90_put_att(nc_id, NF90_GLOBAL, 'Technical_support', & 'patrick.raberanto@lmd.polytechnique.fr')) call check(nf90_put_att(nc_id, NF90_GLOBAL, 'Creationdate',date)) call check(nf90_put_att(nc_id, NF90_GLOBAL, 'Website', & 'http://climserv.ipsl.polytechnique.fr/cfmip-obs/Calipso_goccp.html')) call check(nf90_put_att(nc_id, NF90_GLOBAL, 'References', & 'Chepfer et al, 2010, The GCM Oriented CALIPSO Cloud Product (CALIPSO-GOCCP), JGR, 105')) call check(nf90_def_dim(nc_id, 'longitude', nlon, lon_dimid)) call check(nf90_def_dim(nc_id, 'latitude', nlat, lat_dimid)) call check(nf90_def_dim(nc_id, 'time', NF90_UNLIMITED, time_dimid)) call check(nf90_def_dim(nc_id, 'nv', binnv, nv_dimid)) call check(nf90_def_dim(nc_id, 'bin', bin, bin_dimid)) dim = (/lon_dimid, lat_dimid, time_dimid/) dim2 = (/lon_dimid, lat_dimid, bin_dimid, time_dimid/) dim3 = (/nv_dimid, bin_dimid/) call check(nf90_def_var(nc_id, 'longitude', NF90_FLOAT, lon_dimid, lon_varid)) call check(nf90_put_att(nc_id, lon_varid, 'lon_name','Longitude')) call check(nf90_put_att(nc_id, lon_varid, 'units','degrees_east')) call check(nf90_put_att(nc_id, lon_varid, 'axis','X')) call check(nf90_def_var(nc_id, 'latitude', NF90_FLOAT, lat_dimid, lat_varid)) call check(nf90_put_att(nc_id, lat_varid, 'lon_name','Latitude')) call check(nf90_put_att(nc_id, lat_varid, 'units','degrees_north')) call check(nf90_put_att(nc_id, lat_varid, 'axis','Y')) call check(nf90_def_var(nc_id, 'time', NF90_FLOAT, time_dimid, time_varid)) call check(nf90_put_att(nc_id, time_varid, 'units', & 'months since 1-1-'//vtime//' 00:00:00')) call check(nf90_put_att(nc_id, time_varid, 'axis','T')) call check(nf90_def_var(nc_id, 'bin', NF90_FLOAT, bin_dimid, bin_varid)) call check(nf90_put_att(nc_id, bin_varid, 'lon_name','Time')) call check(nf90_put_att(nc_id, bin_varid, 'units', & 'degK')) call check(nf90_put_att(nc_id, bin_varid, 'axis','Z')) call check(nf90_def_var(nc_id, 'bin_bounds', NF90_FLOAT, dim3, bin2_varid)) call check(nf90_enddef(nc_id)) call check(nf90_put_var(nc_id, lon_varid, vlon)) call check(nf90_put_var(nc_id, lat_varid, vlat)) call check(nf90_put_var(nc_id, time_varid, tim)) call check(nf90_put_var(nc_id, bin_varid, vbin)) call check(nf90_put_var(nc_id, bin2_varid, vbin_bounds)) call check(nf90_close(nc_id)) deallocate(vbin,vbin_bounds) end subroutine create_mapnc !----------------------------------------------------------------------------! subroutine map_recvar2nc3(var,nvar,nvarlon,tot,fvar,hvar,dim,dim2,fname,nlon,nlat,vday) use netcdf implicit none integer, parameter :: ndims=3, ndims2=4, histmax=10 real,parameter :: nan=-999!, fill=-777 integer :: nlon , nlat ,dim(ndims), dim2(ndims2) integer :: varid,varid1,varid2,varid3, ncid ! character(LEN=*) :: fname,vday,nvar,nvarlon real*4,dimension(nlon,nlat,12) :: var,fvar real*4,dimension(nlon,nlat,12) :: tot real*4,dimension(nlon,nlat,histmax,12) :: hvar call check(nf90_open('/bdd/CFMIP/GOCCP/temp/'//fname,NF90_WRITE,ncid)) call check(nf90_redef(ncid)) print *, '1' call check(nf90_def_var(ncid, 'n_tot', NF90_FLOAT, dim, varid)) call check(nf90_put_att(ncid, varid, 'lon_name', & 'Number of orbit passages')) call check(nf90_put_att(ncid, varid, 'missing_value',nan)) print *, '2' call check(nf90_def_var(ncid, 'a_'//nvar, NF90_FLOAT, dim, varid2)) call check(nf90_put_att(ncid, varid2, 'lon_name', & nvarlon)) call check(nf90_put_att(ncid, varid2, 'missing_value',nan)) call check(nf90_def_var(ncid, 'f_'//nvar, NF90_FLOAT, dim, varid1)) call check(nf90_put_att(ncid, varid1, 'lon_name', & '% of retrieved pixels out of cloudy pixels')) call check(nf90_put_att(ncid, varid1, 'missing_value',nan)) !call check(nf90_def_var(ncid, 'h_'//nvar, NF90_FLOAT, dim2, varid3)) ! call check(nf90_put_att(ncid, varid3, 'lon_name', & ! nvarlon//' PDF')) ! call check(nf90_put_att(ncid, varid3, 'missing_value',nan)) call check(nf90_enddef(ncid)) print *, '3' call check(nf90_put_var(ncid, varid, tot)) call check(nf90_put_var(ncid, varid2, var)) call check(nf90_put_var(ncid, varid1, fvar)) print *, '4' ! call check(nf90_put_var(ncid, varid3, hvar)) call check(nf90_close(ncid)) endsubroutine map_recvar2nc3 !----------------------------------------------------------------------------! subroutine map_recvar2nc4(var,nvar,nvarlon,tot,fvar,hvar,dim,dim2,fname,nlon,nlat,vday) use netcdf implicit none integer, parameter :: ndims=3, ndims2=4, histmax=10 real,parameter :: nan=-999!, fill=-777 integer :: nlon , nlat ,dim(ndims), dim2(ndims2) integer :: varid,varid1,varid2,varid3, ncid ! character(LEN=*) :: fname,vday,nvar,nvarlon real*4,dimension(nlon,nlat,12) :: var,fvar real*4,dimension(nlon,nlat,12) :: tot real*4,dimension(nlon,nlat,histmax,12) :: hvar call check(nf90_create('/bdd/CFMIP/GOCCP/temp/'//fname,NF90_WRITE,ncid)) call check(nf90_redef(ncid)) print *, '1' call check(nf90_def_var(ncid, 'N_TOT', NF90_FLOAT, dim, varid)) call check(nf90_put_att(ncid, varid, 'lon_name', & 'Number of orbit passages')) call check(nf90_put_att(ncid, varid, 'missing_value',nan)) print *, '2' call check(nf90_def_var(ncid, 'a_'//nvar, NF90_FLOAT, dim, varid2)) call check(nf90_put_att(ncid, varid2, 'lon_name', & nvarlon)) call check(nf90_put_att(ncid, varid2, 'missing_value',nan)) call check(nf90_def_var(ncid, 'f_'//nvar, NF90_FLOAT, dim, varid1)) call check(nf90_put_att(ncid, varid1, 'lon_name', & '% of retrieved pixels out of cloudy pixels')) call check(nf90_put_att(ncid, varid1, 'missing_value',nan)) call check(nf90_def_var(ncid, 'h_'//nvar, NF90_FLOAT, dim2, varid3)) call check(nf90_put_att(ncid, varid3, 'lon_name', & nvarlon//' PDF')) call check(nf90_put_att(ncid, varid3, 'missing_value',nan)) call check(nf90_enddef(ncid)) print *, '3' call check(nf90_put_var(ncid, varid, tot)) call check(nf90_put_var(ncid, varid2, var)) call check(nf90_put_var(ncid, varid1, fvar)) print *, '4' call check(nf90_put_var(ncid, varid3, hvar)) call check(nf90_close(ncid)) endsubroutine map_recvar2nc4 !----------------------------------------------------------------------------! end program goccp_2_claudia