[ncl-talk] Coefficient_of Divergence

Kunal Bali kunal.bali9 at gmail.com
Thu Nov 9 23:34:40 MST 2017


Sorry for the inconvenience regarding previous mail. please ignore that.

I have figured it out the problem.

Thanks for all the suggestions Dennis Sir.


regards
Kunal Bali






On Fri, Nov 10, 2017 at 11:56 AM, Kunal Bali <kunal.bali9 at gmail.com> wrote:

> Dear Dennis Sir,
> thanks for the suggestion.
> it is working with few time steps, but not for say 442-time steps.
>
> I tried your suggestion, now it is not able to calculate the CoD.
>
> I simply used
>
> ;-----calculation of coefficient of divergence
>     DATA_SINGLE_3D = conform(data_subset, data_single, 0)
>    x1 = (DATA_SINGLE_3D - data_subset)
>    x2 = (DATA_SINGLE_3D + data_subset)
>   * CoD1   = (x1/ where(x2.ne.0, x2, x2 at _FillValue))^2 *
>    printVarSummary(CoD1)
>    printMinMax(CoD1, 0)
>    print("---")
>
>    *CoD2 = dim_avg_n_Wrap(CoD1, 0) *   ; (nlat,mlon)
>    CoD2 at long_name = "Coef of Divergence"
>    printVarSummary(CoD2)
>    printMinMax(CoD2,0)
>
>    CoD2_avg = avg(CoD2)                        ; small area; no need to
> weight
>                                                ; for plotting only
>
>    *CoD_final = sqrt(CoD2)*
>    printVarSummary(CoD3)
>    printMinMax(CoD3,0)
>
>    CoD3 at lat2d  = lat(ilt1:ilt2,iln1:iln2)    ; use := to force
> reassignment of lat2d
>    CoD3 at lon2d  = lon(ilt1:ilt2,iln1:iln2)    ; ditto
>
>  ;  res at gsnRightString = "avg(CoD2)="+sprintf("%5.3f", CoD2_avg)
>    *plot = gsn_csm_contour_map(wks,CoD_final,res)*
> the errors are
>
> *Variable: CoD1*
> Type: float
> Total Size: 1736176 bytes
>             434044 values
> Number of Dimensions: 3
> Dimensions and sizes:    [442] x [1] x [982]
> Coordinates:
> Number Of Attributes: 1
>   _FillValue :    -28672
> (0)    min=0   max=1
> (0)    ---
>
> *Variable: CoD2*
> Type: float
> Total Size: 3928 bytes
>             982 values
> Number of Dimensions: 2
> Dimensions and sizes:    [1] x [982]
> Coordinates:
> Number Of Attributes: 3
>   long_name :    Coef of Divergence
>   _FillValue :    -28672
>   average_op_ncl :    dim_avg_n function was applied
> (0)    Coef of Divergence : min=0   max=1
>
> *Variable: CoD3*
> Type: float
> Total Size: 3928 bytes
>             982 values
> Number of Dimensions: 2
> Dimensions and sizes:    [1] x [982]
> Coordinates:
> Number Of Attributes: 1
>   _FillValue :    -28672
> (0)    min=0   max=1
> fatal:ScalarFieldInitialize: Insufficient number of elements in sfDataArray
> fatal:Unable to initialize layer-Can't Create
> fatal:Unable to access object with id:-4
> fatal:PID #-4 can't be found in NhlSetValues
> fatal:Unable to access object with id:-4
> warning:Unable to add DataItem "(null)" to DataList "cnScalarFieldData"
> fatal:CompileDataList:DataList has no valid members
>
>
> regards
> Kunal Bali
>
>
>
>
>
>
> On Fri, Nov 10, 2017 at 3:20 AM, Dennis Shea <shea at ucar.edu> wrote:
>
>> [1] I do not have the file:
>>      maiactaotE.h00v02.20010040635-20011550640.nc
>>
>>
>> [2] where: See the 'Caveat' in the documentation
>>      https://www.ncl.ucar.edu/Document/Functions/Built-in/where.shtml
>>
>>
>>
>> *CoD   = 1. / where(x2.ne.0, x1/x2, x2 at _FillValue)   ; it can be
>> divisible by 0 *
>>      should be
>>
>>       *CoD   = (x1 / where(x2.ne.0, x2, x2 at _FillValue))^2  *
>>
>>
>> [3] I used a file with only a few time steps. See attached
>>
>>
>>
>> On Wed, Nov 8, 2017 at 11:05 PM, Kunal Bali <kunal.bali9 at gmail.com>
>> wrote:
>>
>>>
>>> when I try the attached script (plot1.ncl) for large time steps say 442
>>> then
>>> it shows an error
>>>
>>>
>>>
>>> *fatal:divide: Division by 0, Can't continuefatal:Div: operator failed,
>>> can't continuefatal:["Execute.c":8640]:Execute: Error occurred at or near
>>> line 120 in file plot.ncl*
>>>
>>> *120 line is *
>>> CoD1 = ((DATA_SINGLE_3D - data_subset)/(DATA_SINGLE_3D + data_subset))^2
>>>
>>> So I separated this line to
>>>    x1 = (DATA_SINGLE_3D - data_subset)
>>>    x2 = (DATA_SINGLE_3D + data_subset)
>>>
>>> and then tried
>>>
>>>
>>> *CoD   = 1. / where(x2.ne.0, x1/x2, x2 at _FillValue)   ; it can be
>>> divisible by 0    CoD1 = (CoD)^2*
>>>    printVarSummary(CoD1)
>>>    printMinMax(CoD1, 0)
>>>
>>>
>>> But, still showing the same error
>>>
>>>
>>>
>>> *fatal:divide: Division by 0, Can't continuefatal:Div: operator failed,
>>> can't continuefatal:["Execute.c":8640]:Execute: Error occurred at or near
>>> line 120 in file plot.ncl*
>>>
>>>
>>> regards
>>> Kunal Bali
>>>
>>>
>>>
>>>
>>>
>>>
>>> On Wed, Nov 8, 2017 at 10:56 AM, Kunal Bali <kunal.bali9 at gmail.com>
>>> wrote:
>>>
>>>> I followed your instruction, But now CoD1 and CoD2 values are showing
>>>> the same values, which is incorrect? and because of this values of the
>>>> square root of CoD2 is not correct.
>>>>
>>>>
>>>> ;-----calculation of coefficient of divergence
>>>>    CoD1 = ((DATA_SINGLE_3D - data_subset)/(DATA_SINGLE_3D+
>>>> data_subset))^2
>>>>    printVarSummary(CoD1)
>>>>    printMinMax(CoD1, 0)
>>>>
>>>>    CoD1 at _FillValue = -28672
>>>>    CoD2 = dim_avg_n_Wrap(CoD1, 0)    ; (nlat,mlon)
>>>>    printVarSummary(CoD2)
>>>>    printMinMax(CoD2,0)
>>>>
>>>>    CoD3 = sqrt(CoD2)
>>>>    printVarSummary(CoD3)
>>>>    printMinMax(CoD3, 0)
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> *Variable: CoD1Type: floatTotal Size: 7824960 bytes            1956240
>>>> valuesNumber of Dimensions: 3Dimensions and sizes:    [3] x [660] x
>>>> [988]Coordinates: Number Of Attributes: 1  _FillValue :    -28672(0)
>>>> min=0   max=0.961394Variable: CoD2Type: floatTotal Size: 2608320
>>>> bytes            652080 valuesNumber of Dimensions: 2Dimensions and
>>>> sizes:    [660] x [988]Coordinates: Number Of Attributes: 2  _FillValue
>>>> :    -28672  average_op_ncl :    dim_avg_n function was applied(0)
>>>> min=0   max=0.961394Variable: CoD3Type: floatTotal Size: 2608320
>>>> bytes            652080 valuesNumber of Dimensions: 2Dimensions and
>>>> sizes:    [660] x [988]Coordinates: Number Of Attributes: 1  _FillValue
>>>> :    -28672(0)    min=0   max=0.980507*
>>>>
>>>>
>>>>
>>>> regsrds
>>>> Kunal Bali
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> On Wed, Nov 8, 2017 at 3:55 AM, Dennis Shea <shea at ucar.edu> wrote:
>>>>
>>>>>
>>>>> *Variable: CoD1*
>>>>> *Dimensions and sizes: [3] x [660] x [988]*
>>>>> *(0) min=0   max=0.961394*
>>>>>
>>>>>
>>>>> step 2:
>>>>>
>>>>>    CoD2 = sum(CoD1)/3           <===  No!
>>>>>    printVarSummary(CoD2)
>>>>>    printMinMax(CoD2, 0)
>>>>>
>>>>> https://www.ncl.ucar.edu/Document/Functions/Contributed/dim_
>>>>> avg_n_Wrap.shtml
>>>>>
>>>>>    CoD2 = dim_avg_n_Wrap(CoD1, 0)    ; (nlat,mlon)
>>>>>    printVarSummary(CoD2)
>>>>>    printMinMax(CoD2,0)
>>>>>
>>>>> ===
>>>>> If you still have large numbers, the find one grid point where a large
>>>>> number occurs, then print the values.
>>>>>
>>>>>    print(CoD1(:,nn,mm))   ; print series where large numbers occur
>>>>> (indices:  nn,mm)
>>>>>
>>>>> See documentation for
>>>>>    https://www.ncl.ucar.edu/Document/Functions/Built-in/ind.shtml
>>>>>    https://www.ncl.ucar.edu/Document/Functions/Built-in/ind_res
>>>>> olve.shtml
>>>>> See Examples 2 & 3
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> On Tue, Nov 7, 2017 at 1:32 PM, Kunal Bali <kunal.bali9 at gmail.com>
>>>>> wrote:
>>>>>
>>>>>> Thanks for suggesting this.
>>>>>>
>>>>>> Actually, I am trying to calculate the COD at each grid cell.
>>>>>>
>>>>>> So as you suggested
>>>>>>
>>>>>>
>>>>>> *DATA_SINGLE_3D = conform(data_subset, data_single, 0)    ; it worked*
>>>>>>
>>>>>>
>>>>>>
>>>>>> *Variable: DATA_SINGLE_3DType: floatTotal Size: 7824960 bytes
>>>>>>     1956240 valuesNumber of Dimensions: 3Dimensions and sizes: [3] x [660]
>>>>>> x [988]Coordinates: Number Of Attributes: 1  _FillValue : -28672*
>>>>>> step 1:
>>>>>> CoD1 = ((DATA_SINGLE_3D - data_subset)/(DATA_SINGLE_3D+
>>>>>> data_subset))^2
>>>>>>    printVarSummary(CoD1)
>>>>>>    printMinMax(CoD1, 0)
>>>>>>
>>>>>> *Variable: CoD1*
>>>>>> *Type: float*
>>>>>> *Total Size: 7824960 bytes*
>>>>>> *            1956240 values*
>>>>>> *Number of Dimensions: 3*
>>>>>> *Dimensions and sizes: [3] x [660] x [988]*
>>>>>> *Coordinates: *
>>>>>> *Number Of Attributes: 1*
>>>>>> *  _FillValue : -28672*
>>>>>> *(0) min=0   max=0.961394*
>>>>>>
>>>>>>
>>>>>> step 2:
>>>>>>
>>>>>>    CoD2 = sum(CoD1)/3
>>>>>>    printVarSummary(CoD2)
>>>>>>    printMinMax(CoD2, 0)
>>>>>>
>>>>>> *Variable: CoD2*
>>>>>> *Type: float*
>>>>>> *Total Size: 4 bytes*
>>>>>> *            1 values*
>>>>>> *Number of Dimensions: 1*
>>>>>> *Dimensions and sizes: [1]*
>>>>>> *Coordinates: *
>>>>>> *(0) min=20691.8   max=20691.8   --------> values are very
>>>>>> high? and also it's not giving at each grid cell, because of that I can't
>>>>>> calculate the sqrt in the next step*
>>>>>>
>>>>>>
>>>>>> step 3:
>>>>>>
>>>>>>   CoD3 = sqrt(CoD2)
>>>>>>  printVarSummary(CoD3)
>>>>>>  printMinMax(CoD2, 0)
>>>>>>
>>>>>>
>>>>>> The final values are coming very high. It should be less than 0.3 at
>>>>>> each grid cell.
>>>>>>
>>>>>> regards
>>>>>> Kunal Bali
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> On Wed, Nov 8, 2017 at 1:18 AM, Dennis Shea <shea at ucar.edu> wrote:
>>>>>>
>>>>>>> If you have a one-dimensional array (1D; eg: a 'time series') and a
>>>>>>> three-dimensional array (3D; eg: time series at multiple grid points), you
>>>>>>> *must* make the arrays 'conformant' for an array calculation
>>>>>>>
>>>>>>> You have:
>>>>>>>    CoD1 = ((data_single(:) - data_subset(:,:,:))/(data_single(:) +
>>>>>>> data_subset(:,:,:)))^2
>>>>>>>
>>>>>>> You did not include a 'printVarSummary' of these variables. Assuming
>>>>>>> data_single(ntim) and data_subset(ntim,nlat,mlon) then you must replicate
>>>>>>> (aka, propogate) the 1D array to the 3D array size. In NCL, this is called
>>>>>>> 'array conformance' . Please see and carefully read:
>>>>>>>
>>>>>>> https://www.ncl.ucar.edu/Document/Functions/Built-in/conform.shtml
>>>>>>> https://www.ncl.ucar.edu/Document/Functions/Built-in/conform
>>>>>>> _dims.shtml
>>>>>>>
>>>>>>> ---
>>>>>>>   DATA_SINGLE_3D = conform(data_subset, data_single, 0)    ;
>>>>>>> (ntim,nlat,mlon)
>>>>>>>   printVarSummary(DATA_SINGLE_3D)   ; Look at data
>>>>>>>
>>>>>>> Do *not* use (:,:,:) in a computation... this is inefficient.
>>>>>>>
>>>>>>>   CoD1 = ((DATA_SINGLE_3D - data_subset)/(DATA_SINGLE_3D+
>>>>>>> data_subset))^2
>>>>>>>   printVarSummary(CoD1)
>>>>>>>   printMinMax(CoD1, 0)
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> On Tue, Nov 7, 2017 at 11:15 AM, Kunal Bali <kunal.bali9 at gmail.com>
>>>>>>> wrote:
>>>>>>>
>>>>>>>> Dear NCL user
>>>>>>>>
>>>>>>>> Suppose, I have 2 datasets
>>>>>>>> e.g.
>>>>>>>>
>>>>>>>> data1 = of single point lat & lon (e.g 28N, 72E) with time steps
>>>>>>>> 365 (having filling values)
>>>>>>>> data2 = of grid box (24-32N, 68-76E) with time steps 365  (having
>>>>>>>> filling values)
>>>>>>>>
>>>>>>>> Now I want to calculate the CoD from one single point to 400km
>>>>>>>> grid box area and then lot the spatial map of the calculated product.
>>>>>>>>
>>>>>>>> Formula for CoD is GIVEN BELOW
>>>>>>>>>>>>>>>>
>>>>>>>> So I calculated in NCL as
>>>>>>>>
>>>>>>>> CoD1 = ((data1 - data2)/(data1 + data2))^2
>>>>>>>> CoD_final = (sqrt(sum(CoD1)))/3
>>>>>>>>
>>>>>>>> please let me know is it the right way to do?
>>>>>>>>
>>>>>>>> I tried to plot the final product CoD_final with the attached
>>>>>>>> script, but error comes as
>>>>>>>>
>>>>>>>> fatal:Minus: Number of dimensions do not match, can't continue
>>>>>>>> fatal:["Execute.c":8578]:Execute: Error occurred at or near line
>>>>>>>> 116 in file plot.ncl
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> regards
>>>>>>>> Kunal Bali
>>>>>>>>
>>>>>>>>
>>>>>>>> _______________________________________________
>>>>>>>> ncl-talk mailing list
>>>>>>>> ncl-talk at ucar.edu
>>>>>>>> List instructions, subscriber options, unsubscribe:
>>>>>>>> http://mailman.ucar.edu/mailman/listinfo/ncl-talk
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>> _______________________________________________
>>>>>> ncl-talk mailing list
>>>>>> ncl-talk at ucar.edu
>>>>>> List instructions, subscriber options, unsubscribe:
>>>>>> http://mailman.ucar.edu/mailman/listinfo/ncl-talk
>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>> _______________________________________________
>>> ncl-talk mailing list
>>> ncl-talk at ucar.edu
>>> List instructions, subscriber options, unsubscribe:
>>> http://mailman.ucar.edu/mailman/listinfo/ncl-talk
>>>
>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.ucar.edu/pipermail/ncl-talk/attachments/20171110/ec692b76/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: COD.png
Type: image/png
Size: 34015 bytes
Desc: not available
URL: <http://mailman.ucar.edu/pipermail/ncl-talk/attachments/20171110/ec692b76/attachment.png>


More information about the ncl-talk mailing list