Ignore:
Timestamp:
Jun 16, 2015, 7:01:30 PM (10 years ago)
Author:
slebonnois
Message:

SL: corrections in Titan and Venus tools

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/LMDZ.VENUS/Tools/angmom.F90

    r1356 r1454  
    4747integer,dimension(4) :: datashape4d ! shape of 4D datasets
    4848
    49 real :: miss_val=9.99e+33 ! special "missing value" to specify missing data
    50 real,parameter :: miss_val_def=9.99e+33 ! default value for "missing value"
     49real :: miss_val ! special "missing value" to specify missing data
     50real,parameter :: miss_val_def=-9.99e+33 ! default value for "missing value"
    5151real :: pi
    5252real,dimension(:),allocatable :: lon ! longitude
    5353integer lonlength ! # of grid points along longitude
    5454real,dimension(:),allocatable :: lat ! latitude
    55 real,dimension(:),allocatable :: latrad ! latitude in radian
     55real,dimension(:),allocatable :: coslat ! cos of latitude
    5656integer latlength ! # of grid points along latitude
    5757real,dimension(:),allocatable :: plev ! Pressure levels (Pa)
     
    117117
    118118pi = 2.*asin(1.)
     119miss_val = miss_val_def
    119120
    120121write(*,*) ""
     
    160161if (ierr.ne.NF_NOERR) stop "Error: Failed reading lat"
    161162
    162 allocate(latrad(latlength))
    163 latrad = lat*pi/180.
     163allocate(coslat(latlength))
     164! Beware of rounding problems at poles...
     165coslat(:) = max(0.,cos(lat(:)*pi/180.))
    164166
    165167! Lat, lon pressure intervals
    166 deltalat = abs(latrad(2)-latrad(1))
     168deltalat = abs(lat(2)-lat(1))*pi/180.
    167169deltalon = abs(lon(2)-lon(1))*pi/180.
    168170
     
    281283endif
    282284
    283 call get_var4d(infid,lonlength,latlength,altlength,timelength,text,vitu,ierr1,ierr2)
     285call get_var4d(infid,lonlength,latlength,altlength,timelength,text,vitu,miss_val,ierr1,ierr2)
    284286if (ierr1.ne.NF_NOERR) stop "Error: Failed to get U ID"
    285287if (ierr2.ne.NF_NOERR) stop "Error: Failed reading zonal wind"
     
    295297
    296298!text="zareoid"
    297 !call get_var4d(infid,lonlength,latlength,altlength,timelength,text,za,ierr1,ierr2)
     299!call get_var4d(infid,lonlength,latlength,altlength,timelength,text,za,miss_val,ierr1,ierr2)
    298300!if (ierr1.ne.NF_NOERR) stop "Error: Failed to get za ID"
    299301!if (ierr2.ne.NF_NOERR) stop "Error: Failed reading zareoid"
     
    309311  text="DUVDF"
    310312endif
    311 call get_var4d(infid,lonlength,latlength,altlength,timelength,text,duvdf,ierr1,ierr2)
     313call get_var4d(infid,lonlength,latlength,altlength,timelength,text,duvdf,miss_val,ierr1,ierr2)
    312314if (ierr1.ne.NF_NOERR) then
    313315  write(*,*) "Failed to get duvdf ID"
     
    357359
    358360text="dugwo"
    359 call get_var4d(infid,lonlength,latlength,altlength,timelength,text,dugwo,ierr1,ierr2)
     361call get_var4d(infid,lonlength,latlength,altlength,timelength,text,dugwo,miss_val,ierr1,ierr2)
    360362if (ierr1.ne.NF_NOERR) then
    361363  write(*,*) "Failed to get dugwo ID"
     
    367369
    368370text="dugwno"
    369 call get_var4d(infid,lonlength,latlength,altlength,timelength,text,dugwno,ierr1,ierr2)
     371call get_var4d(infid,lonlength,latlength,altlength,timelength,text,dugwno,miss_val,ierr1,ierr2)
    370372if (ierr1.ne.NF_NOERR) then
    371373  write(*,*) "Failed to get dugwno ID"
     
    390392
    391393text="duajs"
    392 call get_var4d(infid,lonlength,latlength,altlength,timelength,text,duajs,ierr1,ierr2)
     394call get_var4d(infid,lonlength,latlength,altlength,timelength,text,duajs,miss_val,ierr1,ierr2)
    393395if (ierr1.ne.NF_NOERR) then
    394396  write(*,*) "Failed to get duajs ID"
     
    414416  text="DUDYN"
    415417endif
    416 call get_var4d(infid,lonlength,latlength,altlength,timelength,text,dudyn,ierr1,ierr2)
     418call get_var4d(infid,lonlength,latlength,altlength,timelength,text,dudyn,miss_val,ierr1,ierr2)
    417419if (ierr1.ne.NF_NOERR) then
    418420  write(*,*) "Failed to get dudyn ID"
     
    486488enddo ! timelength
    487489
    488 call cellmass(infid,latlength,lonlength,altlength,timelength, &
    489               lmdflag,deltalon,deltalat,latrad,plev,ps,grav,rayon, &
     490call cellmass(infid,latlength,lonlength,altlength,timelength,lmdflag, &
     491              miss_val,deltalon,deltalat,coslat,plev,ps,grav,rayon, &
    490492              dmass )
    491493
     
    504506      osam(ilon,ilat,ilev,itim) = &
    505507         rayon(ilon,ilat,ilev,itim)*rayon(ilon,ilat,ilev,itim) &
    506        * cos(latrad(ilat))*cos(latrad(ilat)) &
     508       * coslat(ilat)*coslat(ilat) &
    507509       * omega
    508510      rsam(ilon,ilat,ilev,itim) = vitu(ilon,ilat,ilev,itim) &
    509        * rayon(ilon,ilat,ilev,itim)*cos(latrad(ilat))
     511       * rayon(ilon,ilat,ilev,itim)*coslat(ilat)
    510512    else
    511513      osam(ilon,ilat,ilev,itim) = miss_val
     
    569571       tmpp = (ps(ilon+1,ilat,itim)  +ps(ilon,ilat,itim))/2.
    570572      endif
    571       tmou(itim) = tmou(itim) + a0*a0* deltalat*cos(latrad(ilat)) &
     573      tmou(itim) = tmou(itim) + a0*a0* deltalat*coslat(ilat) &
    572574       * signe*dz*tmpp &
    573575       / hadley
     
    582584    if (rayon(ilon,ilat,ilev,itim).ne.miss_val) then
    583585      tdyn(itim) = tdyn(itim) + dudyn(ilon,ilat,ilev,itim) &
    584        * rayon(ilon,ilat,ilev,itim)*cos(latrad(ilat))      &
     586       * rayon(ilon,ilat,ilev,itim)*coslat(ilat)      &
    585587       * dmass(ilon,ilat,ilev,itim) &
    586588       / hadley
     
    599601    if (rayon(ilon,ilat,ilev,itim).ne.miss_val) then
    600602      tajs(itim) = tajs(itim) + duajs(ilon,ilat,ilev,itim) &
    601        * rayon(ilon,ilat,ilev,itim)*cos(latrad(ilat))      &
     603       * rayon(ilon,ilat,ilev,itim)*coslat(ilat)      &
    602604       * dmass(ilon,ilat,ilev,itim) &
    603605       / hadley
     
    616618    if (rayon(ilon,ilat,ilev,itim).ne.miss_val) then
    617619      tbls(itim) = tbls(itim) + duvdf(ilon,ilat,ilev,itim) &
    618        * rayon(ilon,ilat,ilev,itim)*cos(latrad(ilat))      &
     620       * rayon(ilon,ilat,ilev,itim)*coslat(ilat)      &
    619621       * dmass(ilon,ilat,ilev,itim) &
    620622       / hadley
     
    633635    if (rayon(ilon,ilat,ilev,itim).ne.miss_val) then
    634636      tgwo(itim) = tgwo(itim) + dugwo(ilon,ilat,ilev,itim) &
    635        * rayon(ilon,ilat,ilev,itim)*cos(latrad(ilat))      &
     637       * rayon(ilon,ilat,ilev,itim)*coslat(ilat)      &
    636638       * dmass(ilon,ilat,ilev,itim) &
    637639       / hadley
     
    650652    if (rayon(ilon,ilat,ilev,itim).ne.miss_val) then
    651653      tgwno(itim) = tgwno(itim) + dugwno(ilon,ilat,ilev,itim) &
    652          * rayon(ilon,ilat,ilev,itim)*cos(latrad(ilat))       &
     654         * rayon(ilon,ilat,ilev,itim)*coslat(ilat)       &
    653655         * dmass(ilon,ilat,ilev,itim)  &
    654656       / hadley
Note: See TracChangeset for help on using the changeset viewer.