subroutine readtesassim(ngrid,nlayer,zday,pplev,tauref) ! Reading of the dust assimilation file implicit none #include "dimensions.h" #include "dimphys.h" #include "comgeomfi.h" #include "netcdf.inc" #include "datafile.h" #include "callkeys.h" integer, intent(in) :: ngrid,nlayer real, intent(in) :: zday ! date in martian days real, dimension(ngrid,nlayer+1), intent(in) :: pplev real, dimension(ngrid), intent(out) :: tauref ! Local variables real :: realday integer nid,nvarid,ierr integer ltloop,lsloop,iloop,jloop,varloop,ig real, dimension(2) :: taubuf real tau1(4),tau real alt(4) integer latp(4),lonp(4) integer yinf,ysup,xinf,xsup,tinf,tsup real latinf,latsup,loninf,lonsup real latintmp,lonintmp,latdeg,londeg real colat,dlat,dlon,colattmp logical, save :: firstcall=.true. logical :: timeflag real,save :: radeg,pi integer :: timedim,londim,latdim real, dimension(:), allocatable, save :: lat,lon,time real, dimension(:,:,:), allocatable, save :: tautes integer, save :: timelen,lonlen,latlen character(len=33) :: filename realday=mod(zday,669.) if (firstcall) then firstcall=.false. pi=acos(-1.) radeg=180/pi ! assimilated dust file: (NB: iaervar is a common in "callkeys.h") ! iaervar=4 means read dust_tes.nc file ! iaervar=24 means read dust_tes_MY24.nc file ! iaervar=25 means read dust_tes_MY25.nc file ! iaervar=26 means read dust_tes_MY26.nc file if (iaervar.eq.4) then filename="dust_tes.nc" else if (iaervar.eq.24) then filename="dust_tes_MY24.nc" ! which currently is identical to dust_tes.nc else if (iaervar.eq.25) then filename="dust_tes_MY25.nc" else if (iaervar.eq.26) then filename="dust_tes_MY26.nc" else if ((iaervar.eq.6).or.(iaervar.eq.7)) then ! modified TES scenario filename="modifieddust.nc" endif ! Note: datafile() is defined in "datafile.h" ierr=NF_OPEN(trim(datafile)//"/"//trim(filename),NF_NOWRITE,nid) IF (ierr.NE.NF_NOERR) THEN write(*,*)'Problem opening ',trim(filename),' (in phymars/readtesassim.F90)' write(*,*)'It should be in :',trim(datafile),'/' write(*,*)'1) You can change this directory address in ' write(*,*)' file phymars/datafile.h' write(*,*)'2) If necessary, dust.nc (and other datafiles)' write(*,*)' can be obtained online on:' write(*,*)' http://www.lmd.jussieu.fr/~forget/datagcm/datafile' CALL ABORT ENDIF ierr=NF_INQ_DIMID(nid,"Time",timedim) ierr=NF_INQ_DIMLEN(nid,timedim,timelen) ierr=NF_INQ_DIMID(nid,"latitude",latdim) ierr=NF_INQ_DIMLEN(nid,latdim,latlen) ierr=NF_INQ_DIMID(nid,"longitude",londim) ierr=NF_INQ_DIMLEN(nid,londim,lonlen) allocate(tautes(lonlen,latlen,timelen)) allocate(lat(latlen), lon(lonlen), time(timelen)) ierr = NF_INQ_VARID (nid, "dustop",nvarid) #ifdef NC_DOUBLE ierr = NF_GET_VAR_DOUBLE(nid, nvarid, tautes) #else ierr = NF_GET_VAR_REAL(nid, nvarid, tautes) #endif IF (ierr .NE. NF_NOERR) THEN PRINT*, "Error: Readtesassim not found" stop ENDIF ierr = NF_INQ_VARID (nid, "Time",nvarid) #ifdef NC_DOUBLE ierr = NF_GET_VAR_DOUBLE(nid, nvarid, time) #else ierr = NF_GET_VAR_REAL(nid, nvarid, time) #endif IF (ierr .NE. NF_NOERR) THEN PRINT*, "Error: Readtesassim