From: Dennis Shea <shea_at_nyahnyahspammersnyahnyah>

Date: Mon Nov 30 2009 - 19:09:33 MST

Date: Mon Nov 30 2009 - 19:09:33 MST

* > fatal:svdcov: The rightmost dimension of the homlft/hetlft arrays must
*

* > be the same as the leftmost dimension of x, and the leftmost dimension
*

Is "ncolf1" equal to nlat*mlon ?

Is "ncolf2" equal to nlat1*mlon ?

leonardo.silva@cptec.inpe.br wrote:

*> Hi all again
*

*>
*

*> I'm trying to use the svdcov function but it don't work well.
*

*>
*

*> ncl 0> load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl"
*

*> ncl 1> load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl"
*

*> ncl 2> load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl"
*

*> ncl 3>
*

*> ncl 4>
*

*> ncl 5>
*

*> ncl 6> latS = -21.
*

*> ncl 7> latN = 32.
*

*> ncl 8> lonL = -74.
*

*> ncl 9> lonR = 15.
*

*> ncl 10>
*

*> ncl 11> nsvd = 2
*

*> ncl 12> ncolf1 = 471128
*

*> ncl 13> ncolf2 = 471128
*

*> ncl 14>
*

*> ncl 15>
*

*> ncl 16> homlft = new((/nsvd,ncolf1/),float)
*

*> ncl 17> hetlft = new((/nsvd,ncolf1/),float)
*

*> ncl 18> homrgt = new((/nsvd,ncolf2/),float)
*

*> ncl 19> hetrgt = new((/nsvd,ncolf2/),float)
*

*> ncl 20>
*

*> ncl 21> f1 = addfile ("EH5_OM_20C_2_TSURF_DETRENDRUNMEAN.nc", "r")
*

*> ncl 22> tsm = f1->tsurf
*

*> ncl 23>
*

*> ncl 24> f2 = addfile ("EH5_OM_20C_2_U10M_DETRENDRUNMEAN.nc", "r")
*

*> ncl 25> u = f2->u10
*

*> ncl 26>
*

*> ncl 27> dimtsm = dimsizes(tsm)
*

*> ncl 28> ntim = dimtsm(0)
*

*> ncl 29> nlat = dimtsm(1)
*

*> ncl 30> mlon = dimtsm(2)
*

*> ncl 31>
*

*> ncl 32> dimu10 = dimsizes(u)
*

*> ncl 33> ntim1 = dimu10(0)
*

*> ncl 34> nlat1 = dimu10(1)
*

*> ncl 35> mlon1 = dimu10(2)
*

*> ncl 36>
*

*> ncl 37> T = onedtond( ndtooned(tsm), (/ntim,nlat*mlon/))
*

*> ncl 38> U = onedtond( ndtooned(u), (/ntim1,nlat1*mlon1/))
*

*> ncl 39>
*

*> ncl 40> covar = svdcov(T,U,nsvd,homlft,hetlft,homrgt,hetrgt)
*

*>
*

*> and I got it like answer:
*

*> fatal:svdcov: The rightmost dimension of the homlft/hetlft arrays must
*

*> be the same as the leftmost dimension of x, and the leftmost dimension
*

*> must be nsvx
*

*> fatal:Execute: Error occurred at or near line 40
*

*>
*

*> I think the problem is in the space allocate to the matrices
*

*>
*

*> The two fields used in the calculus are shown below:
*

*>
*

*> dimensions:
*

*> lon = 47 ;
*

*> lat = 28 ;
*

*> time = UNLIMITED ; // (358 currently)
*

*> variables:
*

*> double lon(lon) ;
*

*> lon:long_name = "longitude" ;
*

*> lon:units = "degrees_east" ;
*

*> lon:standard_name = "longitude" ;
*

*> double lat(lat) ;
*

*> lat:long_name = "latitude" ;
*

*> lat:units = "degrees_north" ;
*

*> lat:standard_name = "latitude" ;
*

*> double time(time) ;
*

*> time:units = "day as %Y%m%d.%f" ;
*

*> time:calendar = "proleptic_gregorian" ;
*

*> float u10(time, lat, lon) ;
*

*> u10:long_name = "10m u-velocity" ;
*

*> u10:units = "m/s" ;
*

*> u10:code = 165 ;
*

*> u10:table = 128 ;
*

*> u10:grid_type = "gaussian" ;
*

*>
*

*> dimensions:
*

*> lon = 47 ;
*

*> lat = 28 ;
*

*> time = UNLIMITED ; // (358 currently)
*

*> variables:
*

*> double lon(lon) ;
*

*> lon:long_name = "longitude" ;
*

*> lon:units = "degrees_east" ;
*

*> lon:standard_name = "longitude" ;
*

*> double lat(lat) ;
*

*> lat:long_name = "latitude" ;
*

*> lat:units = "degrees_north" ;
*

*> lat:standard_name = "latitude" ;
*

*> double time(time) ;
*

*> time:units = "day as %Y%m%d.%f" ;
*

*> time:calendar = "proleptic_gregorian" ;
*

*> float tsurf(time, lat, lon) ;
*

*> tsurf:long_name = "surface temperature" ;
*

*> tsurf:units = "K" ;
*

*> tsurf:code = 169 ;
*

*> tsurf:table = 128 ;
*

*> tsurf:grid_type = "gaussian" ;
*

*>
*

*> May I ask if anyone can help me?
*

*>
*

*> I appreciate any help.
*

*>
*

*> Thanks a lot
*

*>
*

*> Leonardo
*

*> = = = = = = = =
*

*> Quoting Dennis Shea <shea@ucar.edu>:
*

*>
*

*>> http://www.ncl.ucar.edu/Document/Functions/Built-in/svdcov.shtml
*

*>>
*

*>> function svdcov (
*

*>> x [*][*] : numeric,
*

*>> y [*][*] : numeric,
*

*>> nsvd : integer,
*

*>> homlft [*][*] : numeric,
*

*>> hetlft [*][*] : numeric,
*

*>> homrgt [*][*] : numeric,
*

*>> hetrgt [*][*] : numeric
*

*>> )
*

*>>
*

*>>
*

*>> You took
*

*>>> tempsup = tsm( time|:, lat|:, lon|: ) ; 3d
*

*>>> uwnd = u( time|:, lat|:, lon|: ) ; 3d
*

*>>
*

*>> which are 3-dimensional, and then invoked svdcov
*

*>>
*

*>>> covar = svdcov(tempsup(time|:, tsurf|:),uwnd(time|:, \
*

*>>> tsurf|:),nsvd,homlft,hetlft,homrgt,hetrgt)
*

*>>
*

*>> with
*

*>> tempsup(time|:, tsurf|:) ; 2d
*

*>> and
*

*>> uwnd(time|:, tsurf|:) ; 2d
*

*>>
*

*>>
*

*>> Where did "tsurf" come from?
*

*>>
*

*>> A transformation from 3d-to-2d does not happen automatically.
*

*>> The user must do this.
*

*>>
*

*>> dimu = dimsizes( u )
*

*>> ntim = dimu(0)
*

*>> nlat = dimu(1)
*

*>> mlon = dimu(2)
*

*>>
*

*>> T = onedtond( ndtooned(tempsup), (/ntim,nlat*mlon/)) ; 2D
*

*>> U = onedtond( ndtooned( uwnd ), (/ntim,nlat*mlon/)) ; 2D
*

*>>
*

*>> covar = svdcov(T,U,nsvd,homlft,hetlft,homrgt,hetrgt)
*

*>>
*

*>>
*

*>> ===
*

*>> If you are new to NCL I suggest you read the mini-language manual.
*

*>> Later, if interested in the graphics, the min-graphics manual.
*

*>>
*

*>> http://www.ncl.ucar.edu/Document/Manuals/
*

*>>
*

*>> They are pdf. They do have color so if you have a color
*

*>> printer, I suggest using it.
*

*>>
*

*>> Good luck
*

*>>
*

*>> leonardo.silva@cptec.inpe.br wrote:
*

*>>> Hi all,
*

*>>>
*

*>>> I'm a new ncl user and I would like to construct an Atlantic
*

*>>> Meridional Mode (AMM) Index like done by ERSL
*

*>>> (http://www.esrl.noaa.gov/psd/data/timeseries/monthly/AMM/). I have
*

*>>> to apply a Maximum Covariance Analysis to a SST field (left field)
*

*>>> and the zonal and meridional 10m wind (right field) through a
*

*>>> Singular Value Decomposition (SVD). I have to extract the first
*

*>>> left (SST) and right (winds) maps resulting from singular value
*

*>>> decomposition of the covariance matrix. The AMM time series is
*

*>>> calculated via projecting SST or the 10m wind field. onto the
*

*>>> spatial structure resulting from the MCA.
*

*>>>
*

*>>> I tried to construct that thing using the scrpt below:
*

*>>>
*

*>>> load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl"
*

*>>> load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl"
*

*>>> load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl"
*

*>>>
*

*>>>
*

*>>>
*

*>>> latS = -21.
*

*>>> latN = 32.
*

*>>> lonL = -74.
*

*>>> lonR = 15.
*

*>>>
*

*>>> nsvd = 2
*

*>>> ncolf1 = 1316
*

*>>> ncolf2 = 1316
*

*>>>
*

*>>> homlft = new((/nsvd,ncolf1/),float)
*

*>>> hetlft = new((/nsvd,ncolf1/),float)
*

*>>> homrgt = new((/nsvd,ncolf2/),float)
*

*>>> hetrgt = new((/nsvd,ncolf2/),float)
*

*>>>
*

*>>> f1 = addfile ("EH5_OM_20C_2_TSURF_DETRENDRUNMEAN.nc", "w")
*

*>>> tsm = f1->tsurf
*

*>>> f1!0 = "time"
*

*>>> f2 = addfile ("EH5_OM_20C_2_U10M_DETRENDRUNMEAN.nc", "w")
*

*>>> u = f2->u10
*

*>>> tempsup = tsm( time|:, lat|:, lon|: )
*

*>>> uwnd = u( time|:, lat|:, lon|: )
*

*>>>
*

*>>> covar = svdcov(tempsup(time|:, tsurf|:),uwnd(time|:,
*

*>>> tsurf|:),nsvd,homlft,hetlft,homrgt,hetrgt)
*

*>>>
*

*>>> asciiwrite("mca.dat", covar(0,:))
*

*>>>
*

*>>> and I got it like answer:
*

*>>>
*

*>>> ncl 28> covar = svdcov(tempsup(time|:, tsurf|:),uwnd(time|:,
*

*>>> tsurf|:),nsvd,homlft,hetlft,homrgt,hetrgt)
*

*>>> fatal:Number of subscripts do not match number of dimensions of
*

*>>> variable,(2) Subscripts used, (3) Subscripts expected
*

*>>> fatal:Execute: Error occurred at or near line 28
*

*>>>
*

*>>> I have more one question:
*

*>>>
*

*>>> How can I put the wind (u+v) components onto a one variable? Have I
*

*>>> to sum the u and v.nc files?
*

*>>>
*

*>>> Regards
*

*>>>
*

*>>> Leonardo
*

*>>>
*

*>>> _______________________________________________
*

*>>> ncl-talk mailing list
*

*>>> List instructions, subscriber options, unsubscribe:
*

*>>> http://mailman.ucar.edu/mailman/listinfo/ncl-talk
*

*>
*

*>
*

_______________________________________________

ncl-talk mailing list

List instructions, subscriber options, unsubscribe:

http://mailman.ucar.edu/mailman/listinfo/ncl-talk

Received on Mon Nov 30 19:10:24 2009

*
This archive was generated by hypermail 2.1.8
: Thu Dec 03 2009 - 09:53:22 MST
*