Commit 64cdfcfe authored by Uwe Schulzweida's avatar Uwe Schulzweida
Browse files

Added operator cloudlayer: compute low, mid and high clouds

parent f49e343f
......@@ -267,6 +267,7 @@ src/CDItest.c -text
src/Cat.c -text
src/Change.c -text
src/Change_e5slm.c -text
src/Cloudlayer.c -text
src/Comp.c -text
src/Compc.c -text
src/Complextorect.c -text
......
2010-04-04 Uwe Schulzweida <Uwe.Schulzweida@zmaw.de>
* Added operator cloudlayer: compute low, mid and high clouds [request: Daniel Klocke]
2010-04-01 Martin Claus <mclaus@ifm-geomar.de>
* vertwind: added missing value support
......
/*
This file is part of CDO. CDO is a collection of Operators to
manipulate and analyse Climate model Data.
Copyright (C) 2003-2010 Uwe Schulzweida, Uwe.Schulzweida@zmaw.de
See COPYING file for copying and redistribution conditions.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; version 2 of the License.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
*/
#include <ctype.h>
#include <string.h>
#include <math.h>
#include "cdi.h"
#include "cdo.h"
#include "cdo_int.h"
#include "pstream.h"
#include "vinterp.h"
#define SCALESLP (101325.0)
/* ================================================= */
/* LayerCloud calculates random overlap cloud cover */
/* ================================================= */
static
void layer_cloud(const double *cc, double *ll, long MaxLev, long MinLev, long dimgp)
{
long i, k;
double maxval, minval;
double ZEPSEC;
ZEPSEC = 1.-1.0e-12;
for ( i = 0; i < dimgp; i++ ) ll[i] = 1. - cc[i+MaxLev*dimgp];
// printf("maxlev %d minlev %d\n", MaxLev, MinLev);
for ( k = MaxLev + 1; k <= MinLev; k++ )
{
for ( i = 0; i < dimgp; i++ )
{
maxval = MAX(cc[i+(k-1)*dimgp], cc[i+k*dimgp]);
minval = MIN(cc[i+(k-1)*dimgp], ZEPSEC);
ll[i] *= (1. - maxval) / (1. - minval);
}
}
for ( i = 0; i < dimgp; i++ ) ll[i] = 1. - ll[i];
}
static
void vct2plev(const double *vct, double *plevs, long nlevs)
{
long k;
for ( k = 0; k < nlevs; k++ )
plevs[k] = vct[k] + vct[k+nlevs] * SCALESLP;
/*
for ( k = 0; k < nlevs; k++ )
printf("plevs %ld %g\n", k, plevs[k]);
for ( k = 1; k < nlevs; k++ )
printf("plevs %ld %g\n", k-1, (plevs[k]+plevs[k-1])/2);
*/
}
static
void hl_index(int *kmax, int *kmin, double pmax, double pmin, long nhlevs, double *pph)
{
long k;
long MaxLev, MinLev;
for ( k = 0; k < nhlevs; k++ )
if ( pph[k] > pmax ) break;
MaxLev = k - 1;
for ( k = nhlevs - 1; k >= 0; k-- )
if ( pph[k] < pmin ) break;
MinLev = k;
*kmax = MaxLev;
*kmin = MinLev;
}
static
void pl_index(int *kmax, int *kmin, double pmax, double pmin, long nlevs, double *plevs)
{
long k;
long MaxLev = -1, MinLev = -1;
for ( k = 0; k < nlevs; k++ )
if ( plevs[k] >= pmax )
{
MaxLev = k;
break;
}
for ( k = nlevs - 1; k >= 0; k-- )
if ( plevs[k] < pmin )
{
MinLev = k;
break;
}
*kmax = MaxLev;
*kmin = MinLev;
}
#define NVARS 3
void *Cloudlayer(void *argument)
{
static char func[] = "Cloudlayer";
int streamID1, streamID2;
int vlistID1, vlistID2;
int taxisID1, taxisID2;
int gridID, zaxisID, tsID;
int surfaceID;
int nlevel, nhlev, nlevs, nrecs, recID, code;
int varID, levelID;
int zrev = FALSE;
int nvars;
int gridsize, i;
int offset;
int nmiss;
int ngp = 0, ngrids;
int aclcac_code;
int aclcacID = -1;
int kmin[NVARS], kmax[NVARS];
char varname[128];
double sfclevel = 0;
double *plevs = NULL;
double *aclcac = NULL;
double *cloud[NVARS];
double missval;
cdoInitialize(argument);
streamID1 = streamOpenRead(cdoStreamName(0));
if ( streamID1 < 0 ) cdiError(streamID1, "Open failed on %s", cdoStreamName(0));
vlistID1 = streamInqVlist(streamID1);
ngrids = vlistNgrids(vlistID1);
for ( i = 0; i < ngrids; i++ )
{
gridID = vlistGrid(vlistID1, i);
if ( gridInqType(gridID) != GRID_SPECTRAL )
{
ngp = gridInqSize(gridID);
break;
}
}
/* check gridsize */
for ( i = 0; i < ngrids; i++ )
{
gridID = vlistGrid(vlistID1, i);
if ( gridInqType(gridID) != GRID_SPECTRAL )
{
if ( ngp != gridInqSize(gridID) )
cdoAbort("Grids have different size!");
}
}
aclcac_code = 223;
nvars = vlistNvars(vlistID1);
for ( varID = 0; varID < nvars; ++varID )
{
gridID = vlistInqVarGrid(vlistID1, varID);
zaxisID = vlistInqVarZaxis(vlistID1, varID);
gridsize = gridInqSize(gridID);
nlevel = zaxisInqSize(zaxisID);
code = vlistInqVarCode(vlistID1, varID);
if ( code <= 0 )
{
vlistInqVarName(vlistID1, varID, varname);
strtolower(varname);
if ( strcmp(varname, "aclcac") == 0 ) code = 223;
}
if ( code == aclcac_code ) aclcacID = varID;
}
if ( aclcacID == -1 )
cdoAbort("Cloud cover (code 223) not found!");
missval = vlistInqVarMissval(vlistID1, aclcacID);
gridID = vlistInqVarGrid(vlistID1, aclcacID);
zaxisID = vlistInqVarZaxis(vlistID1, aclcacID);
gridsize = gridInqSize(gridID);
nlevel = zaxisInqSize(zaxisID);
nhlev = nlevel+1;
aclcac = (double *) malloc(gridsize*nlevel*sizeof(double));
for ( varID = 0; varID < NVARS; ++varID )
cloud[varID] = (double *) malloc(gridsize*sizeof(double));
if ( zaxisInqType(zaxisID) == ZAXIS_PRESSURE )
{
plevs = (double *) malloc(nlevel*sizeof(double));
zaxisInqLevels(zaxisID, plevs);
if ( plevs[0] > plevs[nlevel-1] )
{
double ptmp;
zrev = TRUE;
for ( levelID = 0; levelID < nlevel/2; ++levelID )
{
ptmp = plevs[levelID];
plevs[levelID] = plevs[nlevel-1-levelID];
plevs[nlevel-1-levelID] = ptmp;
}
}
/*
for ( levelID = 0; levelID < nlevel; ++levelID )
{
printf("level %d %g\n", levelID, plevs[levelID]);
}
*/
pl_index(&kmax[2], &kmin[2], 5000., 44000., nlevel, plevs);
pl_index(&kmax[1], &kmin[1], 46000., 73000., nlevel, plevs);
pl_index(&kmax[0], &kmin[0], 75000.,101300., nlevel, plevs);
free(plevs);
}
else if ( zaxisInqType(zaxisID) == ZAXIS_HYBRID )
{
int nvct;
nvct = zaxisInqVctSize(zaxisID);
if ( nlevel == (nvct/2 - 1) )
{
double *vct;
vct = (double *) malloc(nvct*sizeof(double));
memcpy(vct, zaxisInqVctPtr(zaxisID), nvct*sizeof(double));
nlevs = nlevel + 1;
plevs = (double *) malloc(nlevs*sizeof(double));
vct2plev(vct, plevs, nlevs);
free(vct);
hl_index(&kmax[2], &kmin[2], 5000., 44000., nhlev, plevs);
hl_index(&kmax[1], &kmin[1], 46000., 73000., nhlev, plevs);
hl_index(&kmax[0], &kmin[0], 75000.,101300., nhlev, plevs);
free(plevs);
}
else
cdoAbort("Unsupported vertical coordinate table format!");
}
else
cdoAbort("Unsupported Z-Axis type!");
surfaceID = zaxisCreate(ZAXIS_SURFACE, 1);
zaxisDefLevels(surfaceID, &sfclevel);
vlistID2 = vlistCreate();
varID = vlistDefVar(vlistID2, gridID, surfaceID, TIME_VARIABLE);
vlistDefVarCode(vlistID2, varID, 34);
vlistDefVarName(vlistID2, varID, "low_cld");
vlistDefVarLongname(vlistID2, varID, "low cloud");
vlistDefVarMissval(vlistID2, varID, missval);
varID = vlistDefVar(vlistID2, gridID, surfaceID, TIME_VARIABLE);
vlistDefVarCode(vlistID2, varID, 35);
vlistDefVarName(vlistID2, varID, "mid_cld");
vlistDefVarLongname(vlistID2, varID, "mid cloud");
vlistDefVarMissval(vlistID2, varID, missval);
varID = vlistDefVar(vlistID2, gridID, surfaceID, TIME_VARIABLE);
vlistDefVarCode(vlistID2, varID, 36);
vlistDefVarName(vlistID2, varID, "hih_cld");
vlistDefVarLongname(vlistID2, varID, "high cloud");
vlistDefVarMissval(vlistID2, varID, missval);
taxisID1 = vlistInqTaxis(vlistID1);
taxisID2 = taxisDuplicate(taxisID1);
vlistDefTaxis(vlistID2, taxisID2);
streamID2 = streamOpenWrite(cdoStreamName(1), cdoFiletype());
if ( streamID2 < 0 ) cdiError(streamID2, "Open failed on %s", cdoStreamName(1));
streamDefVlist(streamID2, vlistID2);
tsID = 0;
while ( (nrecs = streamInqTimestep(streamID1, tsID)) )
{
taxisCopyTimestep(taxisID2, taxisID1);
streamDefTimestep(streamID2, tsID);
for ( recID = 0; recID < nrecs; recID++ )
{
streamInqRecord(streamID1, &varID, &levelID);
if ( zrev )
offset = (nlevel-1-levelID)*gridsize;
else
offset = levelID*gridsize;
if ( varID == aclcacID )
{
streamReadRecord(streamID1, aclcac+offset, &nmiss);
if ( nmiss != 0 ) cdoAbort("missing values unsupported!");
}
}
for ( varID = 0; varID < NVARS; ++varID )
{
for ( i = 0; i < gridsize; i++ ) cloud[varID][i] = missval;
}
for ( varID = 0; varID < NVARS; ++varID )
{
if ( kmax[varID] != -1 && kmin[varID] != -1 )
layer_cloud(aclcac, cloud[varID], kmax[varID], kmin[varID], gridsize);
}
for ( varID = 0; varID < NVARS; ++varID )
{
nmiss = 0;
for ( i = 0; i < gridsize; i++ )
if ( DBL_IS_EQUAL(cloud[varID][i], missval) ) nmiss++;
streamDefRecord(streamID2, varID, 0);
streamWriteRecord(streamID2, cloud[varID], nmiss);
}
tsID++;
}
streamClose(streamID2);
streamClose(streamID1);
vlistDestroy(vlistID2);
free(aclcac);
for ( varID = 0; varID < NVARS; ++varID )
free(cloud[varID]);
cdoFinish();
return (0);
}
......@@ -12,6 +12,7 @@ cdo_SOURCES = Arith.c \
CDItest.c \
Change.c \
Change_e5slm.c \
Cloudlayer.c \
Comp.c \
Compc.c \
Cond.c \
......
......@@ -51,6 +51,11 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/acx_c_package.m4 \
$(top_srcdir)/m4/ac_lang_program_fortran.m4 \
$(top_srcdir)/m4/acx_lang_fortran_check_include.m4 \
$(top_srcdir)/m4/acx_lang_c_check_include.m4 \
$(top_srcdir)/m4/ac_fc_freeform.m4 \
$(top_srcdir)/m4/acx_fc_library_ldflags.m4 \
$(top_srcdir)/m4/ac_lang_program_fortran.m4 \
$(top_srcdir)/m4/acx_lang_fortran_check_include.m4 \
$(top_srcdir)/m4/acx_lang_c_check_include.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
......@@ -62,72 +67,73 @@ am__installdirs = "$(DESTDIR)$(bindir)"
PROGRAMS = $(bin_PROGRAMS) $(noinst_PROGRAMS)
am_cdo_OBJECTS = Arith.$(OBJEXT) Arithc.$(OBJEXT) Arithdays.$(OBJEXT) \
Arithlat.$(OBJEXT) Cat.$(OBJEXT) CDItest.$(OBJEXT) \
Change.$(OBJEXT) Change_e5slm.$(OBJEXT) Comp.$(OBJEXT) \
Compc.$(OBJEXT) Cond.$(OBJEXT) Cond2.$(OBJEXT) Condc.$(OBJEXT) \
Complextorect.$(OBJEXT) Copy.$(OBJEXT) Del29feb.$(OBJEXT) \
Detrend.$(OBJEXT) Diff.$(OBJEXT) Echam5ini.$(OBJEXT) \
Enlarge.$(OBJEXT) Enlargegrid.$(OBJEXT) Ensstat.$(OBJEXT) \
Eofcoeff.$(OBJEXT) Exprf.$(OBJEXT) Filedes.$(OBJEXT) \
Fillmiss.$(OBJEXT) Filter.$(OBJEXT) Fldrms.$(OBJEXT) \
Fldstat.$(OBJEXT) Fldstat2.$(OBJEXT) Fourier.$(OBJEXT) \
Gengrid.$(OBJEXT) Gradsdes.$(OBJEXT) Gridboxstat.$(OBJEXT) \
Gridcell.$(OBJEXT) Harmonic.$(OBJEXT) Histogram.$(OBJEXT) \
Importamsr.$(OBJEXT) Importbinary.$(OBJEXT) \
Importcmsaf.$(OBJEXT) Importobs.$(OBJEXT) Info.$(OBJEXT) \
Input.$(OBJEXT) Intgrid.$(OBJEXT) Intgridtraj.$(OBJEXT) \
Intlevel.$(OBJEXT) Inttime.$(OBJEXT) Intntime.$(OBJEXT) \
Intyear.$(OBJEXT) Invert.$(OBJEXT) Invertlev.$(OBJEXT) \
Log.$(OBJEXT) Maskbox.$(OBJEXT) Mastrfu.$(OBJEXT) \
Math.$(OBJEXT) Merge.$(OBJEXT) Mergegrid.$(OBJEXT) \
Mergetime.$(OBJEXT) Merstat.$(OBJEXT) Monarith.$(OBJEXT) \
Mrotuv.$(OBJEXT) Mrotuvb.$(OBJEXT) Ninfo.$(OBJEXT) \
Nmltest.$(OBJEXT) Output.$(OBJEXT) Outputgmt.$(OBJEXT) \
Pinfo.$(OBJEXT) Pressure.$(OBJEXT) Regres.$(OBJEXT) \
Remap.$(OBJEXT) Remapeta.$(OBJEXT) Replace.$(OBJEXT) \
Rotuv.$(OBJEXT) Runpctl.$(OBJEXT) Runstat.$(OBJEXT) \
Seascount.$(OBJEXT) Seaspctl.$(OBJEXT) Seasstat.$(OBJEXT) \
Selbox.$(OBJEXT) Select.$(OBJEXT) Selvar.$(OBJEXT) \
Seloperator.$(OBJEXT) Selrec.$(OBJEXT) Seltime.$(OBJEXT) \
Set.$(OBJEXT) Setbox.$(OBJEXT) Setgatt.$(OBJEXT) \
Setgrid.$(OBJEXT) Sethalo.$(OBJEXT) Setmiss.$(OBJEXT) \
Setrange.$(OBJEXT) Setrcaname.$(OBJEXT) Settime.$(OBJEXT) \
Setzaxis.$(OBJEXT) Showinfo.$(OBJEXT) Sinfo.$(OBJEXT) \
Smooth9.$(OBJEXT) Sort.$(OBJEXT) Sorttimestamp.$(OBJEXT) \
Specinfo.$(OBJEXT) Spectral.$(OBJEXT) Spectrum.$(OBJEXT) \
Split.$(OBJEXT) Splitrec.$(OBJEXT) Splitsel.$(OBJEXT) \
Splittime.$(OBJEXT) Splityear.$(OBJEXT) Subtrend.$(OBJEXT) \
Templates.$(OBJEXT) Test.$(OBJEXT) Tests.$(OBJEXT) \
Timcount.$(OBJEXT) Timeof.$(OBJEXT) Timpctl.$(OBJEXT) \
Timsort.$(OBJEXT) Timselpctl.$(OBJEXT) Timselstat.$(OBJEXT) \
Timstat.$(OBJEXT) Timstat2.$(OBJEXT) Timstat3.$(OBJEXT) \
Tinfo.$(OBJEXT) Tocomplex.$(OBJEXT) Transpose.$(OBJEXT) \
Trend.$(OBJEXT) Trms.$(OBJEXT) Tstepcount.$(OBJEXT) \
Vardup.$(OBJEXT) Vargen.$(OBJEXT) Varrms.$(OBJEXT) \
Vertint.$(OBJEXT) Vertstat.$(OBJEXT) Vertwind.$(OBJEXT) \
Wind.$(OBJEXT) Writegrid.$(OBJEXT) Writerandom.$(OBJEXT) \
Yhourstat.$(OBJEXT) Ydaypctl.$(OBJEXT) Ydaystat.$(OBJEXT) \
Ydrunpctl.$(OBJEXT) Ydrunstat.$(OBJEXT) Ymonarith.$(OBJEXT) \
Ymonpctl.$(OBJEXT) Ymonstat.$(OBJEXT) Yseaspctl.$(OBJEXT) \
Yseasstat.$(OBJEXT) Zonstat.$(OBJEXT) cdilib.$(OBJEXT) \
commandline.$(OBJEXT) exception.$(OBJEXT) expr_yacc.$(OBJEXT) \
expr_lex.$(OBJEXT) expr.$(OBJEXT) cdo.$(OBJEXT) \
cdo_pthread.$(OBJEXT) cdo_vlist.$(OBJEXT) field.$(OBJEXT) \
fieldc.$(OBJEXT) field2.$(OBJEXT) fieldmer.$(OBJEXT) \
fieldzon.$(OBJEXT) gradsdeslib.$(OBJEXT) grid.$(OBJEXT) \
grid_gme.$(OBJEXT) grid_lcc.$(OBJEXT) grid_rot.$(OBJEXT) \
griddes.$(OBJEXT) griddes_nc.$(OBJEXT) griddes_h5.$(OBJEXT) \
hetaeta.$(OBJEXT) history.$(OBJEXT) institution.$(OBJEXT) \
interpol.$(OBJEXT) job.$(OBJEXT) modules.$(OBJEXT) \
namelist.$(OBJEXT) normal.$(OBJEXT) pipe.$(OBJEXT) \
process.$(OBJEXT) remaplib.$(OBJEXT) timer.$(OBJEXT) \
realtime.$(OBJEXT) pstream.$(OBJEXT) table.$(OBJEXT) \
userlog.$(OBJEXT) util.$(OBJEXT) legendre.$(OBJEXT) \
fouriertrans.$(OBJEXT) specspace.$(OBJEXT) readline.$(OBJEXT) \
juldate.$(OBJEXT) vinterp.$(OBJEXT) zaxis.$(OBJEXT) \
par_io.$(OBJEXT) pthread_debug.$(OBJEXT) color.$(OBJEXT) \
list.$(OBJEXT) percentiles.$(OBJEXT) nth_element.$(OBJEXT) \
ecacore.$(OBJEXT) ecautil.$(OBJEXT) EcaIndices.$(OBJEXT) \
Hi.$(OBJEXT) Wct.$(OBJEXT) statistic.$(OBJEXT)
Change.$(OBJEXT) Change_e5slm.$(OBJEXT) Cloudlayer.$(OBJEXT) \
Comp.$(OBJEXT) Compc.$(OBJEXT) Cond.$(OBJEXT) Cond2.$(OBJEXT) \
Condc.$(OBJEXT) Complextorect.$(OBJEXT) Copy.$(OBJEXT) \
Del29feb.$(OBJEXT) Detrend.$(OBJEXT) Diff.$(OBJEXT) \
Echam5ini.$(OBJEXT) Enlarge.$(OBJEXT) Enlargegrid.$(OBJEXT) \
Ensstat.$(OBJEXT) Eofcoeff.$(OBJEXT) Exprf.$(OBJEXT) \
Filedes.$(OBJEXT) Fillmiss.$(OBJEXT) Filter.$(OBJEXT) \
Fldrms.$(OBJEXT) Fldstat.$(OBJEXT) Fldstat2.$(OBJEXT) \
Fourier.$(OBJEXT) Gengrid.$(OBJEXT) Gradsdes.$(OBJEXT) \
Gridboxstat.$(OBJEXT) Gridcell.$(OBJEXT) Harmonic.$(OBJEXT) \
Histogram.$(OBJEXT) Importamsr.$(OBJEXT) \
Importbinary.$(OBJEXT) Importcmsaf.$(OBJEXT) \
Importobs.$(OBJEXT) Info.$(OBJEXT) Input.$(OBJEXT) \
Intgrid.$(OBJEXT) Intgridtraj.$(OBJEXT) Intlevel.$(OBJEXT) \
Inttime.$(OBJEXT) Intntime.$(OBJEXT) Intyear.$(OBJEXT) \
Invert.$(OBJEXT) Invertlev.$(OBJEXT) Log.$(OBJEXT) \
Maskbox.$(OBJEXT) Mastrfu.$(OBJEXT) Math.$(OBJEXT) \
Merge.$(OBJEXT) Mergegrid.$(OBJEXT) Mergetime.$(OBJEXT) \
Merstat.$(OBJEXT) Monarith.$(OBJEXT) Mrotuv.$(OBJEXT) \
Mrotuvb.$(OBJEXT) Ninfo.$(OBJEXT) Nmltest.$(OBJEXT) \
Output.$(OBJEXT) Outputgmt.$(OBJEXT) Pinfo.$(OBJEXT) \
Pressure.$(OBJEXT) Regres.$(OBJEXT) Remap.$(OBJEXT) \
Remapeta.$(OBJEXT) Replace.$(OBJEXT) Rotuv.$(OBJEXT) \
Runpctl.$(OBJEXT) Runstat.$(OBJEXT) Seascount.$(OBJEXT) \
Seaspctl.$(OBJEXT) Seasstat.$(OBJEXT) Selbox.$(OBJEXT) \
Select.$(OBJEXT) Selvar.$(OBJEXT) Seloperator.$(OBJEXT) \
Selrec.$(OBJEXT) Seltime.$(OBJEXT) Set.$(OBJEXT) \
Setbox.$(OBJEXT) Setgatt.$(OBJEXT) Setgrid.$(OBJEXT) \
Sethalo.$(OBJEXT) Setmiss.$(OBJEXT) Setrange.$(OBJEXT) \
Setrcaname.$(OBJEXT) Settime.$(OBJEXT) Setzaxis.$(OBJEXT) \
Showinfo.$(OBJEXT) Sinfo.$(OBJEXT) Smooth9.$(OBJEXT) \
Sort.$(OBJEXT) Sorttimestamp.$(OBJEXT) Specinfo.$(OBJEXT) \
Spectral.$(OBJEXT) Spectrum.$(OBJEXT) Split.$(OBJEXT) \
Splitrec.$(OBJEXT) Splitsel.$(OBJEXT) Splittime.$(OBJEXT) \
Splityear.$(OBJEXT) Subtrend.$(OBJEXT) Templates.$(OBJEXT) \
Test.$(OBJEXT) Tests.$(OBJEXT) Timcount.$(OBJEXT) \
Timeof.$(OBJEXT) Timpctl.$(OBJEXT) Timsort.$(OBJEXT) \
Timselpctl.$(OBJEXT) Timselstat.$(OBJEXT) Timstat.$(OBJEXT) \
Timstat2.$(OBJEXT) Timstat3.$(OBJEXT) Tinfo.$(OBJEXT) \
Tocomplex.$(OBJEXT) Transpose.$(OBJEXT) Trend.$(OBJEXT) \
Trms.$(OBJEXT) Tstepcount.$(OBJEXT) Vardup.$(OBJEXT) \
Vargen.$(OBJEXT) Varrms.$(OBJEXT) Vertint.$(OBJEXT) \
Vertstat.$(OBJEXT) Vertwind.$(OBJEXT) Wind.$(OBJEXT) \
Writegrid.$(OBJEXT) Writerandom.$(OBJEXT) Yhourstat.$(OBJEXT) \
Ydaypctl.$(OBJEXT) Ydaystat.$(OBJEXT) Ydrunpctl.$(OBJEXT) \
Ydrunstat.$(OBJEXT) Ymonarith.$(OBJEXT) Ymonpctl.$(OBJEXT) \
Ymonstat.$(OBJEXT) Yseaspctl.$(OBJEXT) Yseasstat.$(OBJEXT) \
Zonstat.$(OBJEXT) cdilib.$(OBJEXT) commandline.$(OBJEXT) \
exception.$(OBJEXT) expr_yacc.$(OBJEXT) expr_lex.$(OBJEXT) \
expr.$(OBJEXT) cdo.$(OBJEXT) cdo_pthread.$(OBJEXT) \
cdo_vlist.$(OBJEXT) field.$(OBJEXT) fieldc.$(OBJEXT) \
field2.$(OBJEXT) fieldmer.$(OBJEXT) fieldzon.$(OBJEXT) \
gradsdeslib.$(OBJEXT) grid.$(OBJEXT) grid_gme.$(OBJEXT) \
grid_lcc.$(OBJEXT) grid_rot.$(OBJEXT) griddes.$(OBJEXT) \
griddes_nc.$(OBJEXT) griddes_h5.$(OBJEXT) hetaeta.$(OBJEXT) \
history.$(OBJEXT) institution.$(OBJEXT) interpol.$(OBJEXT) \
job.$(OBJEXT) modules.$(OBJEXT) namelist.$(OBJEXT) \
normal.$(OBJEXT) pipe.$(OBJEXT) process.$(OBJEXT) \
remaplib.$(OBJEXT) timer.$(OBJEXT) realtime.$(OBJEXT) \
pstream.$(OBJEXT) table.$(OBJEXT) userlog.$(OBJEXT) \
util.$(OBJEXT) legendre.$(OBJEXT) fouriertrans.$(OBJEXT) \
specspace.$(OBJEXT) readline.$(OBJEXT) juldate.$(OBJEXT) \
vinterp.$(OBJEXT) zaxis.$(OBJEXT) par_io.$(OBJEXT) \
pthread_debug.$(OBJEXT) color.$(OBJEXT) list.$(OBJEXT) \
percentiles.$(OBJEXT) nth_element.$(OBJEXT) ecacore.$(OBJEXT) \
ecautil.$(OBJEXT) EcaIndices.$(OBJEXT) Hi.$(OBJEXT) \
Wct.$(OBJEXT) statistic.$(OBJEXT)
cdo_OBJECTS = $(am_cdo_OBJECTS)
cdo_DEPENDENCIES =
am_cdotest_OBJECTS = cdilib.$(OBJEXT) cdotest.$(OBJEXT)
......@@ -281,6 +287,7 @@ cdo_SOURCES = Arith.c \
CDItest.c \
Change.c \
Change_e5slm.c \
Cloudlayer.c \
Comp.c \
Compc.c \
Cond.c \
......@@ -642,6 +649,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Cat.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Change.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Change_e5slm.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Cloudlayer.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Comp.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Compc.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Complextorect.Po@am__quote@
......
......@@ -46,6 +46,7 @@ void *Cat(void *argument);
void *CDItest(void *argument);
void *Change(void *argument);
void *Change_e5slm(void *argument);
void *Cloudlayer(void *argument);
void *Comp(void *argument);
void *Compc(void *argument);
void *Cond(void *argument);
......@@ -242,6 +243,7 @@ void *Wct(void *argument);
#define CDItestOperators {"ncopy"}
#define ChangeOperators {"chcode", "chtabnum", "chname", "chlevel", "chlevelc", "chlevelv", "chltype"}
#define Change_e5slmOperators {"change_e5slm", "change_e5lsm", "change_e5mask"}
#define CloudlayerOperators {"cloudlayer"}
#define CompOperators {"eq", "ne", "le", "lt", "ge", "gt"}
#define CompcOperators {"eqc", "nec", "lec", "ltc", "gec", "gtc"}
#define CondOperators {"ifthen", "ifnotthen"}
......@@ -474,6 +476,7 @@ static modules_t Modules[] =
{ CDItest, NULL, CDItestOperators, CDI_REAL, 1, 1 },
{ Change, ChangeHelp, ChangeOperators, CDI_REAL, 1, 1 },
{ Change_e5slm, NULL, Change_e5slmOperators, CDI_REAL, 1, 1 },
{ Cloudlayer, NULL, CloudlayerOperators, CDI_REAL, 1, 1 },
{ Comp, CompHelp, CompOperators, CDI_REAL, 2, 1 },
{ Compc, CompcHelp, CompcOperators, CDI_REAL, 1, 1 },
{ Cond, CondHelp, CondOperators, CDI_REAL, 2, 1 },
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment