Index: preproc/python/FlexpartTools.py
===================================================================
--- preproc/python/FlexpartTools.py	(revision 57637935b8c736ecb0a376df5e8f6a044bbd05af)
+++ preproc/python/FlexpartTools.py	(revision 57637935b8c736ecb0a376df5e8f6a044bbd05af)
@@ -0,0 +1,431 @@
+#
+# (C) Copyright 2014 UIO.
+#
+# This software is licensed under the terms of the Apache Licence Version 2.0
+# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+#
+# 
+# Creation: October 2014 - Anne Fouilloux - University of Oslo
+#
+#
+import subprocess
+import shutil
+import os, errno
+import datetime
+from dateutil.relativedelta import relativedelta
+import re
+
+from string import atoi
+from numpy  import *
+from ecmwfapi import ECMWFDataServer
+from gribapi import *
+from GribTools import GribTools
+
+def product(*args, **kwds):
+    # product('ABCD', 'xy') --> Ax Ay Bx By Cx Cy Dx Dy
+    # product(range(2), repeat=3) --> 000 001 010 011 100 101 110 111
+    pools = map(tuple, args) * kwds.get('repeat', 1)
+    result = [[]]
+    for pool in pools:
+        result = [x+[y] for x in result for y in pool]
+    for prod in result:
+        yield tuple(prod)
+
+###############################################################
+# utility to remove a file if it exists
+# it does not fail if the file does not exist
+###############################################################
+def silentremove(filename):
+    try:
+        os.remove(filename)
+    except OSError as e: # this would be "except OSError, e:" before Python 2.6
+        if e.errno != errno.ENOENT: # errno.ENOENT = no such file or directory
+            raise # re-raise exception if a different error occured
+
+###############################################################
+# Utility to create directories
+###############################################################
+def mkdir_p(file):
+    path = os.path.dirname(file)
+    try:
+        os.stat(path)
+    except:
+        os.makedirs(path)
+
+##############################################################
+# function to iterate over dates
+##############################################################
+def daterange( start_date, end_date ):
+    if start_date <= end_date:
+        for n in range( ( end_date - start_date ).days + 1 ):
+            yield start_date + datetime.timedelta( n )
+    else:
+        for n in range( ( start_date - end_date ).days + 1 ):
+            yield start_date - datetime.timedelta( n )
+
+##############################################################
+# function to iterate over years
+##############################################################
+def years_between(start_date,end_date):
+    years = []
+    cursor = start_date
+
+    while cursor <= end_date:
+        if cursor.year not in years:
+            years.append(cursor.year)
+        cursor += relativedelta(years=1)
+
+    return years
+##############################################################
+# function to iterate over months
+##############################################################
+def months_between(start_date,end_date):
+    months = []
+    cursor = start_date
+
+    while cursor <= end_date:
+        if cursor.month not in months:
+            months.append(cursor.month)
+        cursor += datetime.timedelta(days=1)
+
+    return months
+
+##############################################################
+# MARSretrieval class
+##############################################################
+class MARSretrieval:
+    'class for MARS retrievals'
+
+    def __init__(self,server, dataset="interim",marsclass="ei",type="",levtype="",levelist="", 
+                 repres="", date="",resol="",stream="",area="",time="",step="",expver="1",
+                 number="",accuracy="", grid="", gaussian="", target="",param=""):
+        self.dataset=dataset
+        self.marsclass=marsclass
+        self.type=type
+        self.levtype=levtype
+        self.levelist=levelist
+        self.repres=repres
+        self.date=date
+        self.resol=resol
+        self.stream=stream
+        self.area=area
+        self.time=time
+        self.step=step
+        self.expver=expver
+        self.target=target
+        self.param=param
+        self.number=number
+        self.accuracy=accuracy
+        self.grid=grid
+        self.gaussian=gaussian
+        self.server=server
+
+    def displayInfo(self):
+        if self.dataset:
+            print "dataset: ", self.dataset
+        if self.marsclass:
+            print "class: ", self.marsclass
+        if self.type:
+             print "type: ", self.type
+        if self.levtype:
+            print "levtype: ", self.levtype
+        if self.levelist:
+            print "levelist: ", self.levelist
+        if self.repres:
+            print "repres: ", self.repres
+        if self.date:
+            print "date: ", self.date
+        if self.resol:
+            print "resol: ", self.resol
+        if self.stream:
+            print "stream: ", self.stream
+        if self.area:
+            print "area: ", self.area
+        if self.time:
+            print "time: ", self.time
+        if self.step:
+            print "step: ", self.step
+        if self.expver:
+            print "expver: ", self.expver
+        if self.target:
+            print "target: ", self.target
+        if self.param:
+            print "param: ", self.param
+        if self.number:
+            print "number: ", self.number
+        if self.accuracy:
+            print "accuracy: ", self.accuracy
+        if self.grid:
+            print "grid: ", self.grid
+        if self.gaussian:
+            print "gaussian: ", self.gaussian
+
+    def dataRetrieve(self):
+        dicolist = {}
+        if self.dataset:
+	        dicolist['dataset']="%s"%(self.dataset)
+        if self.marsclass:
+	        dicolist['class']="%s"%(self.marsclass)
+        if self.date:
+	        dicolist['date']="%s"%(self.date)
+        if self.time:
+	        dicolist['time']="%s"%(self.time)
+        if self.expver:
+	        dicolist['expver']="%s"%(self.expver)
+        if self.param:
+	        dicolist['param']="%s"%(self.param)
+        if self.type:
+	        dicolist['type']="%s"%(self.type)
+        if self.levtype:
+	        dicolist['levtype']="%s"%(self.levtype)
+        if self.levelist:
+	        dicolist['levelist']="%s"%(self.levelist)
+        if self.repres:
+	        dicolist['repres']="%s"%(self.repres)
+        if self.resol:
+	        dicolist['resol']="%s"%(self.resol)
+        if self.stream:
+	        dicolist['stream']="%s"%(self.stream)
+        if self.area:
+	        dicolist['area']="%s"%(self.area)
+        if self.step:
+	        dicolist['step']="%s"%(self.step)
+        if self.target:
+	        dicolist['target']="%s"%(self.target)
+        if self.number:
+	        dicolist['number']="%s"%(self.number)
+        if self.accuracy:
+	        dicolist['accuracy']="%s"%(self.accuracy)
+        if self.grid:
+	        dicolist['grid']="%s"%(self.grid)
+        if self.gaussian:
+	        dicolist['gaussian']="%s"%(self.gaussian)
+
+        self.server.retrieve(dicolist)
+
+
+##############################################################
+class EIFlexpart:
+    'class to retrieve Era Interim data for running FLEXPART'
+##############################################################
+
+    def __init__(self):
+# different mars types for retrieving reanalysis data for flexpart
+       self.types=["an","fc"]
+
+       self.mars={}
+# set type (an/fc) and times and steps for EI
+#         (real) time    [type     time  step ] as in mars  (step for forecast only)     
+       self.mars["00"] = ["an",    "00"]
+       self.mars["01"] = ["fc",    "00", "01"]
+       self.mars["02"] = ["fc",    "00", "02"]
+       self.mars["03"] = ["fc",    "00", "03"]
+       self.mars["04"] = ["fc",    "00", "04"]
+       self.mars["05"] = ["fc",    "00", "05"]
+       self.mars["06"] = ["an",    "06"]
+       self.mars["07"] = ["fc",    "00", "07"]
+       self.mars["08"] = ["fc",    "00", "08"]
+       self.mars["09"] = ["fc",    "00", "09"]
+       self.mars["10"] = ["fc",    "00", "10"]
+       self.mars["11"] = ["fc",    "00", "11"]
+       self.mars["12"] = ["an",    "12"]
+       self.mars["13"] = ["fc",    "12", "01"]
+       self.mars["14"] = ["fc",    "12", "02"]
+       self.mars["15"] = ["fc",    "12", "03"]
+       self.mars["16"] = ["fc",    "12", "04"]
+       self.mars["17"] = ["fc",    "12", "05"]
+       self.mars["18"] = ["an",    "18"]
+       self.mars["19"] = ["fc",    "12", "07"]
+       self.mars["20"] = ["fc",    "12", "08"]
+       self.mars["21"] = ["fc",    "12", "09"]
+       self.mars["22"] = ["fc",    "12", "10"]
+       self.mars["23"] = ["fc",    "12", "11"]
+       
+    def retrieve(self, server, dates,times, area, levels, outputdir):
+        self.dates=dates
+        self.times=times
+        self.server=server
+        self.area=area
+        self.levels=levels
+        if outputdir=="":
+	  self.outputdir='.'
+        else:
+          self.outputdir=outputdir
+        # surface data
+        dataset="interim"
+        marsclass="ei"
+        expver="0001"
+        levels="1/to/"+ self.levels
+# Retrieve Q not for using Q but as a template for a reduced gaussian grid one date and time is enough
+# Take analysis at 00
+        qdate=self.dates
+        idx=qdate.find("/")
+        if (idx >0):
+          qdate=self.dates[:idx]
+        
+        Q= MARSretrieval(self.server, dataset=dataset, marsclass=marsclass, stream="oper", type="an", levtype="ML", levelist="1",
+                         gaussian="reduced",grid="80", resol="159",accuracy="24",target=self.outputdir+"/"+"Q.grb",
+                         date=qdate, time="00",expver=expver, param="133.128")
+        Q.displayInfo()
+        Q.dataRetrieve()
+
+        for type in self.types:
+            stime=set()
+            sstep=set()
+            for time in self.times.split('/'):
+# not so nice... to review later!
+                if self.mars[time][0] == type:
+                  stime.add(self.mars[time][1])
+                  if (len(self.mars[time]) > 2):
+                     sstep.add(self.mars[time][2])
+          
+            rtime="/".join(stime)
+            if len(sstep) > 0:
+              rstep="/".join(sstep)
+            else:
+              rstep=""
+            print type
+            print rtime
+            if rstep!="":
+               print rstep
+            print "MARS retrieve start... "
+            paramUVD="131.128/132.128/155.128"
+            paramT="130.128"
+            paramLNSP="152.128"
+            param2D2T="167.128/168.128"
+            if rstep!="":
+                UVD= MARSretrieval(self.server, dataset=dataset, marsclass=marsclass, stream="oper", type=type, levtype="ML", levelist=levels,
+                         resol="159", accuracy="24",grid="OFF",target=self.outputdir+"/"+type+"UVD.grb",
+                         area=self.area, date=self.dates, time=rtime,step=rstep, expver=expver, param=paramUVD)
+                T= MARSretrieval(self.server, dataset=dataset, marsclass=marsclass, stream="oper", type=type, levtype="ML", levelist=levels,
+                         resol="159", accuracy="24",grid="1.0/1.0",target=self.outputdir+"/"+type+"T.grb",
+                         area=self.area, date=self.dates, time=rtime,step=rstep, expver=expver, param=paramT)
+                LNSP= MARSretrieval(self.server, dataset=dataset, marsclass=marsclass, stream="oper", type=type, levtype="ML", levelist="1",
+                         accuracy="24",target=self.outputdir+"/"+type + "LNSP.grb",
+                         area=self.area, date=self.dates, time=rtime,step=rstep, expver=expver, param=paramLNSP)
+                DT= MARSretrieval(self.server, dataset=dataset, marsclass=marsclass, stream="oper", type=type, levtype="SFC", levelist="OFF",
+                         resol="159",accuracy="24",grid="1.0/1.0",target=self.outputdir+"/"+type + "2D2T.grb",
+                         area=self.area, date=self.dates, time=rtime,step=rstep, expver=expver, param=param2D2T)
+                print "do not retrieve Q for forecast"
+            else:
+                UVD= MARSretrieval(self.server, dataset=dataset, marsclass=marsclass, stream="oper", type=type, levtype="ML", levelist=levels,
+                         resol="159", accuracy="24",grid="OFF",target=self.outputdir+"/"+type + "UVD.grb",
+                         area=self.area, date=self.dates, time=rtime,expver=expver, param=paramUVD)
+                T= MARSretrieval(self.server, dataset=dataset, marsclass=marsclass, stream="oper", type=type, levtype="ML", levelist=levels,
+                         resol="159", accuracy="24",grid="1.0/1.0",target=self.outputdir+"/"+type + "T.grb",
+                         area=self.area, date=self.dates, time=rtime,expver=expver, param=paramT)
+                LNSP= MARSretrieval(self.server, dataset=dataset, marsclass=marsclass, stream="oper", type=type, levtype="ML", levelist="1",
+                         accuracy="24",target=self.outputdir+"/"+type + "LNSP.grb",
+                         area=self.area, date=self.dates, time=rtime,expver=expver, param=paramLNSP)
+                DT= MARSretrieval(self.server, dataset=dataset, marsclass=marsclass, stream="oper", type=type, levtype="SFC", levelist="OFF",
+                         resol="159",accuracy="24",grid="1.0/1.0",target=self.outputdir+"/"+type + "2D2T.grb",
+                         area=self.area, date=self.dates, time=rtime,expver=expver, param=param2D2T)
+
+            UVD.displayInfo()
+            UVD.dataRetrieve()
+            T.dataRetrieve()
+            LNSP.dataRetrieve()
+            DT.dataRetrieve()
+        print "MARS retrieve done... "
+        
+    def getFlexpartTime(self, type,step, time):
+        if int(step) < 10:
+            cstep = '0' +  str(step)
+        else:
+            cstep = str(step)
+        if int(time/100) < 10:
+            ctime = '0' +  str(int(time/100))
+        else:
+            ctime = str(int(time/100))
+
+        ctype = str(type)
+        if ctype == 'fc':
+            myinfo = [ctype,ctime, cstep]
+        else:
+            myinfo = [ctype,ctime]
+        cflextime = None
+        for t, marsinfo in self.mars.items():
+            if myinfo == marsinfo:
+                cflextime=t
+        return cflextime
+
+    def create(self, inputfiles, outputdir):
+        index_keys=["date","time","stepRange"]
+        indexfile="date_time_stepRange.idx"
+        grib=GribTools(inputfiles.files)
+        iid=grib.index(index_keys=index_keys, index_file = indexfile)
+
+        silentremove("fort.10")
+        silentremove("fort.11")
+        silentremove("fort.12")
+        silentremove("fort.13")
+        silentremove("fort.18")
+        index_vals = []
+        for key in index_keys:
+            key_vals = grib_index_get(iid,key)
+
+            index_vals.append(key_vals)
+
+
+        for prod in product(*index_vals):
+            for i in range(len(index_keys)):
+                grib_index_select(iid,index_keys[i],prod[i])
+
+            f10 = open('fort.10','w')
+            f11 = open('fort.11','w')
+            f12 = open('fort.12','w')
+            f13 = open('fort.13','w')
+            f16 = open('fort.16','w')
+            gid = grib_new_from_index(iid)
+            hid = gid
+            cflextime = None
+            if gid is not None: 
+                cdate = str(grib_get(gid, 'date'))
+                cyear = cdate[:4]
+                cmonth = cdate[4:6]
+                cday = cdate[6:8]
+                time = grib_get(gid, 'time')
+                type = grib_get(gid, 'type')
+                step = grib_get(gid, 'stepRange')
+                cflextime = self.getFlexpartTime(type,step, time)
+            while 1:  
+                if gid is None: break
+                paramId = grib_get(gid, 'paramId')
+                if paramId == 133:
+# Relative humidity (Q.grb) is used as a template only so we need the first we "meet"
+                    fout=open('fort.18','w')
+                    grib_write(gid,fout)
+                    fout.close()
+                if paramId == 131 or paramId == 132:
+                    grib_write(gid, f10)
+                if paramId == 130:
+                    grib_write(gid,f11)
+                if paramId == 152:
+                    grib_write(gid,f12)
+                if paramId == 155:
+                    grib_write(gid,f13)
+                if paramId == 167 or paramId == 168:
+                    grib_write(gid, f16)                    
+                grib_release(gid)
+                gid = grib_new_from_index(iid)
+# call for CONVERT2
+            
+            f10.close()
+            f11.close()
+            f12.close()
+            f13.close()
+            f16.close()
+            if hid is not None:
+                p=subprocess.check_call(['CONVERT2'])
+# create the corresponding output file  fort.15 (generated by CONVERT2) + fort.16 (paramId 167 and paramId 168)  
+                mkdir_p(outputdir+'/'+cyear+'/'+cmonth+'/')
+                fout = open(outputdir+'/'+cyear+'/'+cmonth+'/EI'+cyear[2:4]+cmonth+cday+cflextime,'wb')    
+                shutil.copyfileobj(open('fort.15','rb'), fout)     
+                shutil.copyfileobj(open('fort.16','rb'), fout)
+                fout.close()
+
+        grib_index_release(iid)
+
+    def clean(self):
+        print "clean"
+
Index: preproc/python/GribTools.py
===================================================================
--- preproc/python/GribTools.py	(revision 57637935b8c736ecb0a376df5e8f6a044bbd05af)
+++ preproc/python/GribTools.py	(revision 57637935b8c736ecb0a376df5e8f6a044bbd05af)
@@ -0,0 +1,140 @@
+#
+# (C) Copyright 2014 UIO.
+#
+# This software is licensed under the terms of the Apache Licence Version 2.0
+# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
+# 
+# 
+# Creation: July 2014 - Anne Fouilloux - University of Oslo
+#
+#
+
+from gribapi import *
+import traceback
+import sys,os
+
+
+##############################################################
+#  GRIB utilities
+##############################################################
+class GribTools:
+    'class for GRIB API with new methods'
+    def __init__(self,filename):
+        self.filename=filename
+    
+# get keyvalues for a given list of keynames
+# a where statment can be given (list of key and list of values)
+
+    def getkeys(self,keynames,wherekeynames=[],wherekeyvalues=[]):
+        fileid=open(self.filename,'r')
+
+        return_list=[]
+        
+        while 1:
+            gid_in = grib_new_from_file(fileid)  
+            if gid_in is None: break
+            select=True
+            i=0
+            if len(wherekeynames) != len(wherekeyvalues): raise Exception("Give a value for each keyname!")
+
+            for wherekey in wherekeynames:
+                if not grib_is_defined(gid_in, wherekey): raise Exception("where Key was not defined")
+                select=select and (str(wherekeyvalues[i])==str(grib_get(gid_in, wherekey)))
+                i=i+1
+            if select:
+                llist = []
+                for key in keynames:
+                    llist.extend([str(grib_get(gid_in, key))])
+                return_list.append(llist)
+            grib_release(gid_in)
+        fileid.close()
+        return return_list
+      
+# set keyvalues for a given list of keynames
+# a where statment can be given (list of key and list of values)
+# an input file must be given as an input for reading grib messages
+# note that by default all messages are written out
+# if you want to get only those meeting the where statement, use
+# strict=true
+    def setkeys(self,fromfile,keynames,keyvalues, wherekeynames=[],wherekeyvalues=[], strict=False, filemode='w'):
+        fout=open(self.filename,filemode)
+        fin=open(fromfile)
+        
+        while 1:
+            gid_in = grib_new_from_file(fin)  
+            if gid_in is None: break
+            
+            select=True
+            i=0
+            if len(wherekeynames) != len(wherekeyvalues): raise Exception("Give a value for each keyname!")
+
+            for wherekey in wherekeynames:
+                if not grib_is_defined(gid_in, wherekey): raise Exception("where Key was not defined")
+                select=select and (str(wherekeyvalues[i])==str(grib_get(gid_in, wherekey)))
+                i=i+1
+            if select:
+                i=0
+                for key in keynames:
+                    grib_set(gid_in, key, keyvalues[i])
+                    i=i+1
+            if strict:
+                if select:
+                    grib_write(gid_in,fout)
+            else:
+                grib_write(gid_in,fout)
+            grib_release(gid_in)
+        fin.close()
+        fout.close()
+
+# Add the content of a grib file but only messages
+# corresponding to keys/values        
+# if selectWhere is False select fields that are different from keynames/keyvalues
+    def copy(self,filename_in, selectWhere=True, keynames=[], keyvalues=[],filemode='w'):
+        fin=open(filename_in)
+        fout=open(self.filename,filemode)
+        
+        while 1:
+            gid_in = grib_new_from_file(fin)  
+            if gid_in is None: break
+            
+            select=True
+            i=0
+            if len(keynames) != len(keyvalues): raise Exception("Give a value for each keyname!")
+
+            for key in keynames:
+                if not grib_is_defined(gid_in, key): raise Exception("Key was not defined")
+                
+                if selectWhere:
+                    select=select and (str(keyvalues[i])==str(grib_get(gid_in, key)))
+                else:
+                    select=select and (str(keyvalues[i])!=str(grib_get(gid_in, key)))
+                i=i+1
+            if select:
+                grib_write(gid_in,fout)
+            grib_release(gid_in)
+        fin.close()
+        fout.close()
+
+# Create index from a list of files if it does not exist or read it
+    def index(self,index_keys=["mars"], index_file = "my.idx"):
+        self.iid = None
+ 
+        if (os.path.exists(index_file)):
+            self.iid = grib_index_read(index_file)
+            print "Use existing index file: %s "%(index_file)
+        else:
+            for file in self.filename:
+                print "Inputfile: %s "%(file)
+                if self.iid == None:
+                    self.iid = grib_index_new_from_file(file,index_keys)
+                else:
+                     grib_index_add_file(self.iid,file)
+
+            if self.iid != None:
+              grib_index_write(self.iid,index_file)
+        return self.iid 
+
+
+       
+
+        
Index: preproc/python/README.md
===================================================================
--- preproc/python/README.md	(revision 57637935b8c736ecb0a376df5e8f6a044bbd05af)
+++ preproc/python/README.md	(revision 57637935b8c736ecb0a376df5e8f6a044bbd05af)
@@ -0,0 +1,151 @@
+# README #
+
+This documentation shows how to use these python scripts to extract ECMWF ERA-Interim data and generate WINDFIELDS for running FLEXPART. 
+
+### Overview ###
+
+To run FLEXPART with ECMWF ERA-Interim data, you first need to retrieve ECMWF ERA-Interim GRIB fields and generate FLEXPART WINDFIELDS to run FLEXPART.
+
+The two main programs are called respectively `getEIdata.py` and `prepareFLEXPART.py`. 
+
+To get the usage of these programs, use `-h` option:
+
+`getEIdata.py `-h`
+
+Optional arguments are mentionned in squared brackets. 
+
+* `getEIdata.py`
+
+This program allows you to download ECMWF ERA-Interim data from ECMWF using [ecmwfapi](https://software.ecmwf.int/wiki/display/WEBAPI/ECMWF+Web+API+Home). 
+It requires `ecmwfapi` python library (see Requirements below). Check with your local IT group as it may be already available.
+
+`
+Usage: getEIdata.py --start_date=YYYYMMDD [--end_date=YYYYMMDD] [--times=tt1/tt2/tt3] [--levels=nlevels]
+                                                  [--area=north/west/south/east]  [--outputdir=output_directory]
+
+Options:
+  -h, --help            show this help message and exit
+  --start_date=start_date
+                        start date YYYYMMDD
+  --end_date=end_date   end_date YYYYMMDD
+  --times=times         times such as 00/12
+  --levels=levels       number of vertical levels
+  --area=area           area defined as north/west/south/east with default
+                        90.0/-179.0/-90.0/180.0
+  --outputdir=outputdir
+                        root directory for storing output files
+`
+
+* `prepareFLEXPART.py`
+
+This program allow you to generate FLEXPART WINDFIELDS (inputs for FLEXPART). It requires python interface to grib_api and `CONVERT2` program (located in `src` directory with instruction on how to compile it). You also need to provide a namelist for CONVERT2 (see test_1).
+
+`
+Usage: prepareFLEXPART.py --start_date=YYYYMMDD [--end_date=YYYYMMDD] [--namelist=namelist_for_convert] [--inputdir=input_root_directory] [--outputdir=output_directory]
+
+Options:
+  -h, --help            show this help message and exit
+  --start_date=start_date
+                        start date YYYYMMDD
+  --end_date=end_date   end_date YYYYMMDD
+  --namelist=namelist   namelist used for converting
+  --inputdir=inputdir   root directory for reading input files
+  --outputdir=outputdir
+                        root directory for storing output files
+
+`
+### Requirements ###
+
+| Python Support        |
+|----------------------:| 
+| python                | [http://www.python.org](http://www.python.org)  | We have use [python Anaconda](https://store.continuum.io/cshop/anaconda/) for our testings
+| python-numpy          | [http://www.numpy.org/](http://www.numpy.org/)  | Not necessary if you have installed python Anaconda
+| ecmwfapi              | [https://software.ecmwf.int/wiki/display/WEBAPI/ECMWF+Web+API+Home](https://software.ecmwf.int/wiki/display/WEBAPI/ECMWF+Web+API+Home) | You also need to install your API key (as explained in the documentation)
+| Utilities             |
+|----------------------:| 
+|  grib-api             | [https://software.ecmwf.int/wiki/display/GRIB/Home](https://software.ecmwf.int/wiki/display/GRIB/Home) | Make sure you install GRIB-API with JPEG support and python GRIB-API.
+|----------------------:| 
+| FLEXPART programs     | to run these programs (prepareFLEXPART.py), you need to compile CONVERT2 program (located in preproc/src). See separate README file to get instructions on how to compile this code.
+|----------------------:| 
+
+
+### Installation ###
+
+*  Environment
+
+At UIO, Red Hat 6 Linux systems (64 bits) were used for testing. We use the [Module package](http://modules.sourceforge.net/) to set-up user environment.
+
+* Getting the source code
+In the directory of your choice:
+
+`
+git clone git@bitbucket.org:flexpart/flexpart.git
+`
+This command will create a subdirectory called flexpart: it contains the latest FLEXPART version.
+
+Set then environment variable `FLEXPART_HOME`:
+
+** Korn-shell or Bash users:
+`
+cd flexpart
+export FLEXPART_HOME=$PWD
+`
+
+** C-shell users:
+
+`
+cd flexpart
+setenv FLEXPART_HOME=$PWD
+`
+
+* Installation
+
+Make sure your first generate `CONVERT2` program (see separate instructions in `preproc/src`).
+
+Users need to be able to execute prepareFLEXPART.py and getEIdata.py so make sure they have the correct unix permissions:
+
+`
+cd preproc/python
+chmod uog+rx getEIdata.py prepareFLEXPART.py
+`
+
+These two programs must be in the user PATH. At UIO this is done automatically when loading flexpart. If not, you would need to do the following:
+
+** Korn-shell or Bash users:
+`
+export PATH=$FLEXPART_HOME/preproc/python:$PATH
+`
+
+** C-shell users:
+
+`
+setenv PATH $FLEXPART_HOME/preproc/python:$PATH
+`
+
+Where `$FLEXPART_HOME` is the directory where FLEXPART 
+
+* Testing your installation
+
+First check that grib-api python interface is correctly installed on your platform:
+`
+python
+>>> from gribapi import *
+>>>
+`
+Use `CTRL-D` to quit python.
+
+Then check that `ecmwfapi` is properly installed:
+`
+python
+>>> from ecmwfapi import *
+>>>
+`
+
+If the two previous tests were successful, you can run `tests/preproc` (See separate instructions in `tests/preproc`). 
+
+If any of these two tests fail, this probably means that either `ecmwfapi` or `grib-api` have not been installed properly. 
+
+Please report any problems.
+
+###  Installation FAQ ###
+
Index: preproc/python/UIOTools.py
===================================================================
--- preproc/python/UIOTools.py	(revision 57637935b8c736ecb0a376df5e8f6a044bbd05af)
+++ preproc/python/UIOTools.py	(revision 57637935b8c736ecb0a376df5e8f6a044bbd05af)
@@ -0,0 +1,45 @@
+#!/usr/bin/env python                                                                                                                                                                      
+#                                                                                                                                                                                          
+# (C) Copyright 2014 UIO.
+#
+# This software is licensed under the terms of the Apache Licence Version 2.0
+# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+#
+# Creation: October 2014 - Anne Fouilloux - University of Oslo
+#
+
+import os
+
+class UIOFiles:
+    'class to manipulate files'
+    def __init__(self,suffix):
+# type of files to manipulate such as ['.grib', 'grb', 'grib1', 'grib2', 'grb1','grb2']
+        self.suffix=suffix
+
+    def listFiles(self,pathname):
+        ''' list files (suffix previously given) within this directory. '''
+    # Get the absolute path of the pathname parameter
+        pathname = os.path.abspath(pathname)
+ 
+    # Get a list of files in pathname
+        filesInCurDir = os.listdir(pathname)
+        self.counter = 0
+        self.files = []
+    # Traverse through all files
+        for file in filesInCurDir:
+            curFile = os.path.join(pathname, file)
+ 
+        # Check if it's a normal file or directory
+            if os.path.isfile(curFile):
+                # Get the file extension
+                fileNoExt,curFileExtension = os.path.splitext(curFile)
+                # Check if the file has an extension of typical video files
+                if curFileExtension in self.suffix:
+                    # We have got a file file! Increment the counter
+                    self.counter += 1
+                    # add this filename in the list
+                    self.files.append(curFile)
+                    
+            else:
+                # We got a directory, enter into it for further processing
+                self.listFiles(curFile)
Index: preproc/python/getEIdata.py
===================================================================
--- preproc/python/getEIdata.py	(revision 57637935b8c736ecb0a376df5e8f6a044bbd05af)
+++ preproc/python/getEIdata.py	(revision 57637935b8c736ecb0a376df5e8f6a044bbd05af)
@@ -0,0 +1,116 @@
+#!/usr/bin/env python
+#
+# (C) Copyright 2014 UIO.
+#
+# This software is licensed under the terms of the Apache Licence Version 2.0
+# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
+# 
+# Creation: July 2014 - Anne Fouilloux - University of Oslo
+#
+# Get ERA-Interim GRIB fields from ECMWF to prepare WINDFIELDS for running
+# FLEXPART examples.
+# 
+# To run this example, you need to self-register at ECMWF data server and
+# get an API key available from https://api.ecmwf.int/v1/key/
+#
+# Inputs parameters:
+#  start_date: starting date for retrieving ECMWF data
+#  end_date  : end date for retrieving ECMWF data; set to start_date if not specified
+#  times     : forecast or analysis time for MARS retrievals
+#  levels    : number of levels; set to 60 by default (for ERA-interim)
+#  area      : you can define your area with --area=north/west/south/east (values are in degrees)
+#  outputdir : location where you want to store ERA-Interim outputs
+# 
+from ecmwfapi import ECMWFDataServer
+import calendar
+import shutil
+import datetime
+import time
+import os
+from string import strip
+from optparse import OptionParser
+from FlexpartTools import MARSretrieval, EIFlexpart, daterange, mkdir_p, silentremove, months_between
+
+
+def main():
+    usage = """usage: %prog --start_date=YYYYMMDD [--end_date=YYYYMMDD] [--times=tt1/tt2/tt3] [--levels=nlevels]
+                                                  [--area=north/west/south/east]  [--outputdir=output_directory] """
+    parser = OptionParser(usage=usage)
+    parser.add_option("--start_date", dest="start_date",
+                      help="start date YYYYMMDD", metavar="start_date" )
+    parser.add_option( "--end_date", dest="end_date",
+                      help="end_date YYYYMMDD", metavar="end_date")
+    parser.add_option("--times", dest="times",
+                      default="00/03/06/09/12/15/18/21", help="times such as 00/12", metavar="times")
+    parser.add_option("--levels", dest="levels",
+                      default="60",help="number of vertical levels", metavar="levels")
+    parser.add_option("--area", dest="area",
+                      default="90.0/-179.0/-90.0/180.0",help="area defined as north/west/south/east with default 90.0/-179.0/-90.0/180.0", metavar="area")
+    parser.add_option("--outputdir", dest="outputdir",
+                      help="root directory for storing output files", metavar="outputdir")
+    (options, args) = parser.parse_args()
+
+    if not options.start_date:
+        parser.error("start date must be specified!")
+    else:
+        start_date=options.start_date
+
+    if not options.end_date:
+        end_date=start_date
+    else:
+        end_date=options.end_date
+
+    if not options.outputdir:
+# if WORKDIR is defined, we will use it otherwise files 
+# will be stored in the current directory
+        outputdir=os.environ.get("WORKDIR",".")
+    else:
+        outputdir=options.outputdir
+
+
+    print "start date %s "%(start_date)
+    print "end date %s "%(end_date)
+
+       
+    server = ECMWFDataServer()
+
+# Retrieve ERA interim data for running flexpart
+
+    syear=int(start_date[:4])
+    smonth=int(start_date[4:6])
+    sday=int(start_date[6:])
+    start = datetime.date( year = syear, month = smonth, day = sday )
+    eyear=int(end_date[:4])
+    emonth=int(end_date[4:6])
+    eday=int(end_date[6:])
+
+    end = datetime.date( year = eyear, month = emonth, day = eday )
+
+    current_ym = ""
+    ir_date = start
+    retrieve="no"
+    for date in daterange( start, end ):
+# if new year & month then we create a new directory to store output files
+        er_date = date
+        if date.strftime("%Y%m") != current_ym:
+            current_outputdir =  outputdir + "/"  + date.strftime("%Y") + '/' + date.strftime("%m") + '/' 
+            mkdir_p(current_outputdir)
+            if current_ym != "":
+               retrieve="yes"
+
+        if date == end:
+            retrieve="yes"
+
+        if retrieve == "yes":
+                # we need to retrieve MARS data for this period (maximum one month)
+                flexpart = EIFlexpart()
+                dates= ir_date.strftime("%Y%m%d") + "/to/" + er_date.strftime("%Y%m%d") 
+                flexpart.retrieve(server, dates, options.times, options.area, options.levels, current_outputdir)
+                ir_date = er_date
+
+        current_ym =  date.strftime("%Y%m")
+
+
+
+if __name__ == "__main__":
+    main()
Index: preproc/python/prepareFLEXPART.py
===================================================================
--- preproc/python/prepareFLEXPART.py	(revision 57637935b8c736ecb0a376df5e8f6a044bbd05af)
+++ preproc/python/prepareFLEXPART.py	(revision 57637935b8c736ecb0a376df5e8f6a044bbd05af)
@@ -0,0 +1,106 @@
+#!/usr/bin/env python
+#
+# (C) Copyright 2014 UIO.
+#
+# This software is licensed under the terms of the Apache Licence Version 2.0
+# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
+# 
+# Creation: October 2014 - Anne Fouilloux - University of Oslo
+#
+# Compute WINDFILEDS from ECMWF GRIB data
+# 
+import calendar
+import shutil
+import datetime
+import time
+import os
+from UIOTools import UIOFiles
+from string import strip
+from optparse import OptionParser
+from GribTools import GribTools
+from FlexpartTools import EIFlexpart, daterange
+
+
+def main():
+    usage = """usage: %prog --start_date=YYYYMMDD [--end_date=YYYYMMDD] [--namelist=namelist_for_convert] [--inputdir=input_root_directory] [--outputdir=output_directory] """
+    parser = OptionParser(usage=usage)
+    parser.add_option("--start_date", dest="start_date",
+                      help="start date YYYYMMDD", metavar="start_date" )
+    parser.add_option( "--end_date", dest="end_date",
+                      help="end_date YYYYMMDD", metavar="end_date")
+    parser.add_option("--namelist", dest="namelist",
+                      help="namelist used for converting", metavar="namelist")
+    parser.add_option("--inputdir", dest="inputdir",
+                      help="root directory for reading input files", metavar="inputdir")
+    parser.add_option("--outputdir", dest="outputdir",
+                      help="root directory for storing output files", metavar="outputdir")
+    (options, args) = parser.parse_args()
+
+    if not options.start_date:
+        parser.error("start date must be specified!")
+    else:
+        start_date=options.start_date
+
+    if not options.end_date:
+        end_date=start_date
+    else:
+        end_date=options.end_date
+
+    if not options.namelist:
+        namelist='fort.4'
+    else:
+        namelist=options.namelist
+
+    if not options.inputdir:
+# if WORKDIR is defined, we will use it otherwise files 
+# will be stored in the current directory
+        inputdir=os.environ.get("WORKDIR",".")
+    else:
+        inputdir=options.inputdir
+
+    if not options.outputdir:
+# if FLEXPART_WINDS is defined, we will use it otherwise files 
+# will be stored in the current directory
+        outputdur=os.environ.get("FLEXPART_WINDS",".")
+    else:
+        outputdir=options.outputdir
+
+
+
+    syear=int(start_date[:4])
+    smonth=int(start_date[4:6])
+    sday=int(start_date[6:])
+    start = datetime.date( year = syear, month = smonth, day = sday )
+    eyear=int(end_date[:4])
+    emonth=int(end_date[4:6])
+    eday=int(end_date[6:])
+
+    end = datetime.date( year = eyear, month = emonth, day = eday )
+
+
+
+    cyear = -1
+    cmont = -1
+    inputfiles=UIOFiles(['.grib', '.grb', '.grib1', '.grib2', '.grb1','.grb2'])
+    if (not os.path.exists('fort.4')):
+        fnamelist=open('fort.4','w')
+        shutil.copyfileobj(open(namelist,'r'), fnamelist)
+        fnamelist.close()
+    for date in daterange( start, end ):
+# data retrieved by year/month
+           if cyear != date.year or cmonth != date.month:
+             print 'year : ' + str(date.year) + ' month : ', date.month
+             cyear = date.year
+             cmonth = date.month
+
+             # we will make the list of files from the root inputdir
+             if cmonth < 10:
+                 inputfiles.listFiles(inputdir + '/'+str(cyear)+'/0'+str(date.month))
+             else:
+                 inputfiles.listFiles(inputdir + '/'+str(cyear)+'/'+str(date.month))
+                 
+             flexpart = EIFlexpart()
+             flexpart.create(inputfiles, outputdir)
+
+if __name__ == "__main__":
+    main()
Index: preproc/src/README.md
===================================================================
--- preproc/src/README.md	(revision 57637935b8c736ecb0a376df5e8f6a044bbd05af)
+++ preproc/src/README.md	(revision 57637935b8c736ecb0a376df5e8f6a044bbd05af)
@@ -0,0 +1,106 @@
+# README #
+
+This documentation shows how to compile `CONVERT2` program
+
+### Overview ###
+
+### Requirements ###
+
+| Utilities             |
+|----------------------:| 
+|  make                 | [http://www.gnu.org/software/make/](http://www.gnu.org/software/make/) |
+| Third party libraries |
+|----------------------:| 
+|  EMOS                 | [https://software.ecmwf.int/wiki/display/EMOS/Emoslib](https://software.ecmwf.int/wiki/display/EMOS/Emoslib) | Make sure you install EMOS lib with 64 bits reals.
+|  grib-api             | [https://software.ecmwf.int/wiki/display/GRIB/Home](https://software.ecmwf.int/wiki/display/GRIB/Home) | Make sure you install GRIB-API with JPEG support and python GRIB-API.
+
+
+### Installation ###
+
+*  Environment
+
+At UIO, Red Hat 6 Linux systems (64 bits) were used for testing. We use the [Module package](http://modules.sourceforge.net/) to set-up user environment.
+
+* Getting the source code
+
+If you still haven't got the source from bitbucket (Please note that it needs to be done once only).
+
+In the directory of your choice:
+
+`
+git clone git@bitbucket.org:flexpart/flexpart.git
+`
+This command will create a subdirectory called flexpart: it contains the latest FLEXPART version.
+
+Set then environment variable `FLEXPART_HOME`:
+
+** Korn-shell or Bash users:
+`
+cd flexpart
+export FLEXPART_HOME=$PWD
+`
+
+** C-shell users:
+
+`
+cd flexpart
+setenv FLEXPART_HOME=$PWD
+`
+
+* Installation
+
+There is a makefile example called `makefile` which you can use as a template. It uses GNU gfortran version 4.8.2. The version of your `gfortran`compiler can be tested with the following command:
+`
+gfortran --version
+`
+
+For using our `makefile`, you need to define the following environment variables:
+
+Please note that these environment variables may be automatically defined on your system. Please check with your local IT administrator. For instance at UIO, these environment variables are defined by loading the corresponding modulefiles (`module load grib_api emos`).
+
++ `GRIB_API_FFLAGS` 
++ `GRIB_API_LDFLAGS`
++ `EMOS_LDFLAGS`
+
+For instance at UIO on sverdrup.uio.no:
+`
+> echo $GRIB_API_FFLAGS
+-I/site/opt/grib_api/1.12.3_gnu/include
+
+> echo $GRIB_API_LDFLAGS
+-L/site/opt/grib_api/1.12.3_gnu/lib -lgrib_api_f90 -lgrib_api
+
+> echo $EMOS_LDFLAGS
+-L/site/opt/emos/000392_grib_api_1.12.3_gnu -lemos
+
+`
+
+If `EMOS` and `GRIB-API` have been installed properly and you have adjusted your makefile then you can compile `CONVERT2`:
+`
+cd preproc/src
+
+gmake
+`
+
+If successful, a program called `CONVERT2` is created in the current directory. You now need to add this program in your `PATH`:
+** Korn-shell or Bash users:
+`
+export PATH=$FLEXPART_HOME/preproc/src:$PATH
+`
+
+** C-shell users:
+
+`
+setenv PATH $FLEXPART_HOME/preproc/src:$PATH
+`
+
+Where `$FLEXPART_HOME` is the directory where FLEXPART
+
+* Testing your installation
+
+See separate instructions in `tests/preproc`.
+
+Please report any problems.
+
+###  Installation FAQ ###
+
Index: preproc/src/convert_mod.f90
===================================================================
--- preproc/src/convert_mod.f90	(revision 57637935b8c736ecb0a376df5e8f6a044bbd05af)
+++ preproc/src/convert_mod.f90	(revision 57637935b8c736ecb0a376df5e8f6a044bbd05af)
@@ -0,0 +1,4 @@
+MODULE CONVERT_MOD
+  CONTAINS
+
+END MODULE CONVERT_MOD
Index: preproc/src/ftrafo.f90
===================================================================
--- preproc/src/ftrafo.f90	(revision 57637935b8c736ecb0a376df5e8f6a044bbd05af)
+++ preproc/src/ftrafo.f90	(revision 57637935b8c736ecb0a376df5e8f6a044bbd05af)
@@ -0,0 +1,167 @@
+MODULE FTRAFO
+
+CONTAINS
+
+  ! Berechnung des Gradienten eines Skalars aus dem Feld des
+  !	Skalars XMN im Phasenraum. Zurueckgegeben werden die Felder der
+  !	Komponenten des horizontalen Gradienten XLAM,XPHI auf dem Gauss'schen Gitter.
+  !	GWSAVE ist ein Hilfsfeld fuer die FFT
+  !	P enthaelt die assoziierten Legendrepolynome, H deren Ableitung
+  !	MLAT enthaelt die Anzahl der Gitterpunkte pro Breitenkreis
+  !	MNAUF gibt die spektrale Aufloesung an, 
+  !	NI = Anzahl der Gauss'schen Gitterpunkte,
+  !	NJ = Anzahl der Gauss'schen Breiten,
+  !	NK = Anzahl der Niveaus
+
+  SUBROUTINE PHGRAD(XMN,XLAM,XPHI,GWSAVE,IFAX,P,H,MLAT, &
+       MNAUF,NI,NJ,NK)
+
+    USE PHTOGR
+    IMPLICIT NONE
+    INTEGER   J,K,M,N,NI,NJ,NK,MNAUF,GGIND,LL,LLP,LLH,LLS,LLPS,LLHS
+    INTEGER		MLAT(NJ),IFAX(10,NJ)
+    REAL     	UFOUC(0:MAXAUF),MUFOUC(0:MAXAUF)
+    REAL 			VFOUC(0:MAXAUF),MVFOUC(0:MAXAUF)
+    REAL			XMN(0:(MNAUF+1)*(MNAUF+2)-1,NK)
+    REAL		P(0:(MNAUF+3)*(MNAUF+4)/2,NJ/2)
+    REAL		H(0:(MNAUF+2)*(MNAUF+3)/2)
+    REAL			XLAM(NI,NK),XPHI(NI,NK)
+    REAL			GWSAVE(8*NJ+15,NJ/2)
+    REAL      ERAD
+    REAL 		SCR,SCI,ACR,ACI,MUSCR,MUSCI,MUACR,MUACI,RT,IT
+
+    ERAD = 6367470.0
+
+    GGIND=0
+    DO  J = 1,NJ/2
+       CALL DPLGND(MNAUF,P(0,J),H)
+       DO  K = 1,NK
+	  LL=0
+          LLP=0
+	  LLH=0
+	  DO  M = 0,MNAUF
+             SCR=0.D0
+             SCI=0.D0
+             ACR=0.D0
+             ACI=0.D0
+             MUSCR=0.D0
+             MUSCI=0.D0
+             MUACR=0.D0
+             MUACI=0.D0
+             LLS=LL
+             LLPS=LLP
+             LLHS=LLH
+             IF(2*M+1.LT.MLAT(J)) THEN
+                DO  N = M,MNAUF,2
+                   RT=XMN(2*LL,K)
+                   IT=XMN(2*LL+1,K)
+                   SCR =SCR+ RT*P(LLP,J)
+                   SCI =SCI+ IT*P(LLP,J)
+                   MUACR =MUACR+RT*H(LLH)
+                   MUACI =MUACI+ IT*H(LLH)
+                   LL=LL+2
+                   LLP=LLP+2
+                   LLH=LLH+2
+                ENDDO
+                LL=LLS+1
+                LLP=LLPS+1
+                LLH=LLHS+1
+                DO N = M+1,MNAUF,2
+                   RT=XMN(2*LL,K)
+                   IT=XMN(2*LL+1,K)
+                   ACR =ACR+ RT*P(LLP,J)
+                   ACI =ACI+ IT*P(LLP,J)
+                   MUSCR =MUSCR+ RT*H(LLH)
+                   MUSCI =MUSCI+ IT*H(LLH)
+                   LL=LL+2
+                   LLP=LLP+2
+                   LLH=LLH+2
+                ENDDO
+             ENDIF
+             LL=LLS+(MNAUF-M+1)
+             LLP=LLPS+(MNAUF-M+3)
+             LLH=LLHS+(MNAUF-M+2)
+
+             UFOUC(2*M)=-M*(SCI-ACI)/ERAD
+             UFOUC(2*M+1)=M*(SCR-ACR)/ERAD
+             VFOUC(2*M)=-M*(SCI+ACI)/ERAD
+             VFOUC(2*M+1)=M*(SCR+ACR)/ERAD
+
+             MUFOUC(2*M)=-(MUSCR-MUACR)/ERAD
+             MUFOUC(2*M+1)=-(MUSCI-MUACI)/ERAD
+             MVFOUC(2*M)=-(MUSCR+MUACR)/ERAD
+             MVFOUC(2*M+1)=-(MUSCI+MUACI)/ERAD
+          ENDDO
+
+          CALL RFOURTR(VFOUC,GWSAVE(:,J),IFAX(:,J),MNAUF,MLAT(J))
+          XLAM(GGIND+1:GGIND+MLAT(J),K)=VFOUC(0:MLAT(J)-1)
+          CALL RFOURTR(UFOUC,GWSAVE(:,J),IFAX(:,J),MNAUF,MLAT(J))
+          XLAM(NI-GGIND-MLAT(J)+1:NI-GGIND,K)=UFOUC(0:MLAT(J)-1)
+
+          CALL RFOURTR(MVFOUC, GWSAVE(:,J),IFAX(:,J),MNAUF,MLAT(J))
+          XPHI(GGIND+1:GGIND+MLAT(J),K)=MVFOUC(0:MLAT(J)-1)
+          CALL RFOURTR(MUFOUC,GWSAVE(:,J),IFAX(:,J),MNAUF,MLAT(J))
+          XPHI(NI-GGIND-MLAT(J)+1:NI-GGIND,K)=MUFOUC(0:MLAT(J)-1)
+
+       ENDDO
+       GGIND=GGIND+MLAT(J)
+    ENDDO
+
+  END SUBROUTINE PHGRAD
+
+  ! Berechnung der Divergenz aus dem Windfeld (U,V)
+  !	im Phasenraum. Zurueckgegeben werden die Felder der
+  !	Komponenten des horizontalen Gradienten XLAM,XPHI auf dem Gauss'schen Gitter.
+  !	GWSAVE ist ein Hilfsfeld fuer die FFT
+  !	P enthaelt die assoziierten Legendrepolynome, H deren Ableitung
+  !	MLAT enthaelt die Anzahl der Gitterpunkte pro Breitenkreis
+  !	MNAUF gibt die spektrale Aufloesung an, 
+  !	NI = Anzahl der Gauss'schen Gitterpunkte,
+  !	NJ = Anzahl der Gauss'schen Breiten,
+  !	NK = Anzahl der Niveaus
+  ! Beachte, dass das Windfeld eine um 1 erhoehte Aufloesung in mu-Richtung hat.
+
+  SUBROUTINE CONTGL(PS,DPSDL,DPSDM,DIV,U,V,BREITE,ETA,MLAT,A,B,NI,NJ,NK)
+
+    IMPLICIT NONE
+
+    INTEGER NI,NJ,NK,I,J,K,MLAT(NJ),L
+
+    REAL A(NK+1),B(NK+1)
+    REAL PS(NI),DPSDL(NI),DPSDM(NI)
+    REAL DIV(NI,NK),U(NI,NK),V(NI,NK),ETA(NI,NK)
+    REAL BREITE(NJ)
+
+    REAL DIVT1,DIVT2,POB,PUN,DPSDT,COSB
+
+    L=0
+    DO  J=1,NJ
+       COSB=(1.0-BREITE(J)*BREITE(J))
+       DO  I=1,MLAT(J)
+          L=L+1
+          DIVT1=0.0
+          DIVT2=0.0
+          DO  K=1,NK
+             POB=A(K)+B(K)*PS(L)
+             PUN=A(K+1)+B(K+1)*PS(L)
+
+             DIVT1=DIVT1+DIV(L,K)*(PUN-POB)
+             if(cosb .gt. 0.) then
+                DIVT2=DIVT2+(B(K+1)-B(K))*PS(L)* &
+                (U(L,K)*DPSDL(L)+V(L,K)*DPSDM(L))/COSB
+             endif
+
+             ETA(L,K)=-DIVT1-DIVT2
+          ENDDO
+
+          DPSDT=(-DIVT1-DIVT2)/PS(L)
+
+          DO  K=1,NK
+             ETA(L,K)=ETA(L,K)-DPSDT*B(K+1)*PS(L)
+          ENDDO
+          PS(L)=DPSDT*PS(L)
+       ENDDO
+    ENDDO
+  END SUBROUTINE CONTGL
+
+END MODULE FTRAFO
Index: preproc/src/ftrafo.mod
===================================================================
--- preproc/src/ftrafo.mod	(revision 57637935b8c736ecb0a376df5e8f6a044bbd05af)
+++ preproc/src/ftrafo.mod	(revision 57637935b8c736ecb0a376df5e8f6a044bbd05af)
@@ -0,0 +1,154 @@
+GFORTRAN module version '10' created from ftrafo.f90
+MD5:b9e03f77ba78d596090a2da61fc43bc1 -- If you edit this, you'll get what you deserve.
+
+(() () () () () () () () () () () () () () () () () () () () () () ()
+() () () ())
+
+()
+
+()
+
+()
+
+()
+
+()
+
+(2 'contgl' 'ftrafo' '' 1 ((PROCEDURE UNKNOWN-INTENT MODULE-PROC DECL
+UNKNOWN 0 0 SUBROUTINE) (UNKNOWN 0 0 0 0 UNKNOWN ()) 3 0 (4 5 6 7 8 9 10
+11 12 13 14 15 16 17) () 0 () () () 0 0)
+18 'ftrafo' 'ftrafo' '' 1 ((MODULE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0) (UNKNOWN 0 0 0 0 UNKNOWN ()) 0 0 () () 0 () () () 0 0)
+19 'phgrad' 'ftrafo' '' 1 ((PROCEDURE UNKNOWN-INTENT MODULE-PROC DECL
+UNKNOWN 0 0 SUBROUTINE) (UNKNOWN 0 0 0 0 UNKNOWN ()) 20 0 (21 22 23 24
+25 26 27 28 29 30 31 32) () 0 () () () 0 0)
+4 'ps' '' '' 3 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN 0
+0 DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (1 0 EXPLICIT (
+CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (VARIABLE (INTEGER 4 0 0 0
+INTEGER ()) 0 15 ())) 0 () () () 0 0)
+5 'dpsdl' '' '' 3 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN
+0 0 DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (1 0 EXPLICIT (
+CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (VARIABLE (INTEGER 4 0 0 0
+INTEGER ()) 0 15 ())) 0 () () () 0 0)
+6 'dpsdm' '' '' 3 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN
+0 0 DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (1 0 EXPLICIT (
+CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (VARIABLE (INTEGER 4 0 0 0
+INTEGER ()) 0 15 ())) 0 () () () 0 0)
+7 'div' '' '' 3 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN 0
+0 DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (2 0 EXPLICIT (
+CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (VARIABLE (INTEGER 4 0 0 0
+INTEGER ()) 0 15 ()) (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (
+VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 17 ())) 0 () () () 0 0)
+8 'u' '' '' 3 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN 0 0
+DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (2 0 EXPLICIT (CONSTANT (
+INTEGER 4 0 0 0 INTEGER ()) 0 '1') (VARIABLE (INTEGER 4 0 0 0 INTEGER ())
+0 15 ()) (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (VARIABLE (
+INTEGER 4 0 0 0 INTEGER ()) 0 17 ())) 0 () () () 0 0)
+9 'v' '' '' 3 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN 0 0
+DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (2 0 EXPLICIT (CONSTANT (
+INTEGER 4 0 0 0 INTEGER ()) 0 '1') (VARIABLE (INTEGER 4 0 0 0 INTEGER ())
+0 15 ()) (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (VARIABLE (
+INTEGER 4 0 0 0 INTEGER ()) 0 17 ())) 0 () () () 0 0)
+10 'breite' '' '' 3 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0 DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (1 0 EXPLICIT
+(CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (VARIABLE (INTEGER 4 0 0 0
+INTEGER ()) 0 16 ())) 0 () () () 0 0)
+11 'eta' '' '' 3 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN
+0 0 DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (2 0 EXPLICIT (
+CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (VARIABLE (INTEGER 4 0 0 0
+INTEGER ()) 0 15 ()) (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (
+VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 17 ())) 0 () () () 0 0)
+12 'mlat' '' '' 3 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN
+0 0 DIMENSION DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () (1 0 EXPLICIT (
+CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (VARIABLE (INTEGER 4 0 0 0
+INTEGER ()) 0 16 ())) 0 () () () 0 0)
+13 'a' '' '' 3 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN 0
+0 DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (1 0 EXPLICIT (
+CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (OP (INTEGER 4 0 0 0
+INTEGER ()) 0 PLUS (VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 17 ()) (
+CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1'))) 0 () () () 0 0)
+14 'b' '' '' 3 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN 0
+0 DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (1 0 EXPLICIT (
+CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (OP (INTEGER 4 0 0 0
+INTEGER ()) 0 PLUS (VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 17 ()) (
+CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1'))) 0 () () () 0 0)
+15 'ni' '' '' 3 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN 0
+0 DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+16 'nj' '' '' 3 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN 0
+0 DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+17 'nk' '' '' 3 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN 0
+0 DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+21 'xmn' '' '' 20 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN
+0 0 DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (2 0 EXPLICIT (
+CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '0') (OP (INTEGER 4 0 0 0
+INTEGER ()) 0 MINUS (OP (INTEGER 4 0 0 0 INTEGER ()) 0 TIMES (OP (
+INTEGER 4 0 0 0 INTEGER ()) 0 PARENTHESES (OP (INTEGER 4 0 0 0 INTEGER ())
+0 PLUS (VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 29 ()) (CONSTANT (
+INTEGER 4 0 0 0 INTEGER ()) 0 '1'))) (OP (INTEGER 4 0 0 0 INTEGER ()) 0
+PARENTHESES (OP (INTEGER 4 0 0 0 INTEGER ()) 0 PLUS (VARIABLE (INTEGER 4
+0 0 0 INTEGER ()) 0 29 ()) (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '2'))))
+(CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1')) (CONSTANT (INTEGER 4 0 0
+0 INTEGER ()) 0 '1') (VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 32 ())) 0
+() () () 0 0)
+22 'xlam' '' '' 20 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0 DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (2 0 EXPLICIT
+(CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (VARIABLE (INTEGER 4 0 0 0
+INTEGER ()) 0 30 ()) (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (
+VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 32 ())) 0 () () () 0 0)
+23 'xphi' '' '' 20 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0 DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (2 0 EXPLICIT
+(CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (VARIABLE (INTEGER 4 0 0 0
+INTEGER ()) 0 30 ()) (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (
+VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 32 ())) 0 () () () 0 0)
+24 'gwsave' '' '' 20 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0 DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (2 0 EXPLICIT
+(CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (OP (INTEGER 4 0 0 0
+INTEGER ()) 0 PLUS (OP (INTEGER 4 0 0 0 INTEGER ()) 0 TIMES (CONSTANT (
+INTEGER 4 0 0 0 INTEGER ()) 0 '8') (VARIABLE (INTEGER 4 0 0 0 INTEGER ())
+0 31 ())) (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '15')) (CONSTANT (
+INTEGER 4 0 0 0 INTEGER ()) 0 '1') (OP (INTEGER 4 0 0 0 INTEGER ()) 0
+DIVIDE (VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 31 ()) (CONSTANT (
+INTEGER 4 0 0 0 INTEGER ()) 0 '2'))) 0 () () () 0 0)
+25 'ifax' '' '' 20 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0 DIMENSION DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () (2 0
+EXPLICIT (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (CONSTANT (
+INTEGER 4 0 0 0 INTEGER ()) 0 '10') (CONSTANT (INTEGER 4 0 0 0 INTEGER ())
+0 '1') (VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 31 ())) 0 () () () 0 0)
+26 'p' '' '' 20 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN 0
+0 DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (2 0 EXPLICIT (
+CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '0') (OP (INTEGER 4 0 0 0
+INTEGER ()) 0 DIVIDE (OP (INTEGER 4 0 0 0 INTEGER ()) 0 TIMES (OP (
+INTEGER 4 0 0 0 INTEGER ()) 0 PARENTHESES (OP (INTEGER 4 0 0 0 INTEGER ())
+0 PLUS (VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 29 ()) (CONSTANT (
+INTEGER 4 0 0 0 INTEGER ()) 0 '3'))) (OP (INTEGER 4 0 0 0 INTEGER ()) 0
+PARENTHESES (OP (INTEGER 4 0 0 0 INTEGER ()) 0 PLUS (VARIABLE (INTEGER 4
+0 0 0 INTEGER ()) 0 29 ()) (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '4'))))
+(CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '2')) (CONSTANT (INTEGER 4 0 0
+0 INTEGER ()) 0 '1') (OP (INTEGER 4 0 0 0 INTEGER ()) 0 DIVIDE (
+VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 31 ()) (CONSTANT (INTEGER 4 0 0
+0 INTEGER ()) 0 '2'))) 0 () () () 0 0)
+27 'h' '' '' 20 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN 0
+0 DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (1 0 EXPLICIT (
+CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '0') (OP (INTEGER 4 0 0 0
+INTEGER ()) 0 DIVIDE (OP (INTEGER 4 0 0 0 INTEGER ()) 0 TIMES (OP (
+INTEGER 4 0 0 0 INTEGER ()) 0 PARENTHESES (OP (INTEGER 4 0 0 0 INTEGER ())
+0 PLUS (VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 29 ()) (CONSTANT (
+INTEGER 4 0 0 0 INTEGER ()) 0 '2'))) (OP (INTEGER 4 0 0 0 INTEGER ()) 0
+PARENTHESES (OP (INTEGER 4 0 0 0 INTEGER ()) 0 PLUS (VARIABLE (INTEGER 4
+0 0 0 INTEGER ()) 0 29 ()) (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '3'))))
+(CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '2'))) 0 () () () 0 0)
+28 'mlat' '' '' 20 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0 DIMENSION DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () (1 0
+EXPLICIT (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (VARIABLE (
+INTEGER 4 0 0 0 INTEGER ()) 0 31 ())) 0 () () () 0 0)
+29 'mnauf' '' '' 20 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0 DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+30 'ni' '' '' 20 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN
+0 0 DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+31 'nj' '' '' 20 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN
+0 0 DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+32 'nk' '' '' 20 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN
+0 0 DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+)
+
+('contgl' 0 2 'ftrafo' 0 18 'phgrad' 0 19)
Index: preproc/src/grphreal.f90
===================================================================
--- preproc/src/grphreal.f90	(revision 57637935b8c736ecb0a376df5e8f6a044bbd05af)
+++ preproc/src/grphreal.f90	(revision 57637935b8c736ecb0a376df5e8f6a044bbd05af)
@@ -0,0 +1,189 @@
+MODULE GRTOPH
+
+  USE PHTOGR
+
+CONTAINS
+  !
+  SUBROUTINE GRPH213(CXMN,FELD,WSAVE,IFAX,Z,W,MLAT, &
+       MNAUF,MAXL,MAXB,MLEVEL)
+
+    !     DIE ROUTINE F]HRT EINE TRANSFORMATION EINER
+    !     FELDVARIABLEN VOM PHASENRAUM IN  DEN PHYSIKALISCHEN
+    !     RAUM AUF KUGELKOORDINATEN DURCH
+    !
+    !     CXMN   = SPEKTRALKOEFFIZIENTEN IN DER REIHENFOLGE
+    !              CX00,CX01,CX11,CX02,....CXMNAUFMNAUF
+    !			CXM		 = FOURIERKOEFFIZIENTEN - nur ein Hilfsfeld
+    !     FELD   = FELD DER METEOROLOGISCHEN VARIABLEN
+    !			WSAVE  = Working Array fuer Fouriertransformation
+    !     Z 	 = LEGENDREFUNKTIONSWERTE
+    !
+    !     MNAUF    ANZAHL DER FOURIERKOEFFIZIENTEN
+    !     MAXL     ANZAHL DER FUER DAS GITTER BENUTZTEN LAENGEN
+    !     MAXB     ANZAHL DER FUER DAS GITTER BENOETIGTEN BREITEN
+    !     MLEVEL   ANZAHL DER LEVELS, DIE TRANSFORMIERT WERDEN
+    !
+    IMPLICIT REAL (A-H,O-Z)
+
+
+    !			Anzahl der Gitterpunkte pro Breitenkreis des reduzierten 
+    !			Gauss'schen Gitters
+    INTEGER MLAT(MAXB),ISIZE,IFAX(10,MAXB)
+
+    !    FELD DER LEGENDREPOLYNOME FUER EINE BREITE
+    REAL*8 Z(MAXB/2,0:((MNAUF+3)*(MNAUF+4))/2)
+
+    !      LOGICAL*1 USED(((216*217)/2+1)*160)
+
+    DIMENSION CXMN(0:(MNAUF+1)*(MNAUF+2)-1,MLEVEL)
+    REAL FELD(MAXL,MLEVEL)
+    DIMENSION WSAVE(8*MAXB+15,MAXB/2)
+    REAL*8 W(MAXB) 
+    DIMENSION IND(MAXB)
+
+
+    IND(1)=0
+    DO J=2,MAXB/2
+       IND(j)=IND(J-1)+MLAT(J-1)
+    ENDDO
+    !$OMP PARALLEL DO SCHEDULE(DYNAMIC)
+    DO  L=1,MLEVEL
+       CALL GRPHSUB(L,IND,CXMN,FELD,WSAVE,IFAX,Z,W,MLAT, &
+            &MNAUF,MAXL,MAXB,MLEVEL)
+    ENDDO
+    !$omp end parallel do
+
+
+    RETURN
+  END SUBROUTINE GRPH213
+  !
+  SUBROUTINE GRPHSUB(L,IND,CXMN,FELD,WSAVE,IFAX,Z,W,MLAT, &
+       &MNAUF,MAXL,MAXB,MLEVEL)
+
+    !     DIE ROUTINE F]HRT EINE TRANSFORMATION EINER
+    !     FELDVARIABLEN VOM PHASENRAUM IN  DEN PHYSIKALISCHEN
+    !     RAUM AUF KUGELKOORDINATEN DURCH
+    !
+    !     CXMN   = SPEKTRALKOEFFIZIENTEN IN DER REIHENFOLGE
+    !              CX00,CX01,CX11,CX02,....CXMNAUFMNAUF
+    !			CXM		 = FOURIERKOEFFIZIENTEN - nur ein Hilfsfeld
+    !     FELD   = FELD DER METEOROLOGISCHEN VARIABLEN
+    !			WSAVE  = Working Array fuer Fouriertransformation
+    !     Z 	 = LEGENDREFUNKTIONSWERTE
+    !
+    !     MNAUF    ANZAHL DER FOURIERKOEFFIZIENTEN
+    !     MAXL     ANZAHL DER FUER DAS GITTER BENUTZTEN LAENGEN
+    !     MAXB     ANZAHL DER FUER DAS GITTER BENOETIGTEN BREITEN
+    !     MLEVEL   ANZAHL DER LEVELS, DIE TRANSFORMIERT WERDEN
+    !
+    IMPLICIT REAL (A-H,O-Z)
+
+    !    FELD DER FOURIERKOEFFIZIENTEN
+    REAL CXMS(4*(MNAUF+1))
+    REAL CXMA(4*(MNAUF+1))
+    REAL,ALLOCATABLE :: CXM(:,:)
+
+    !			Anzahl der Gitterpunkte pro Breitenkreis des reduzierten 
+    !			Gauss'schen Gitters
+    INTEGER MLAT(MAXB),ISIZE
+
+    !    FELD DER LEGENDREPOLYNOME FUER EINE BREITE
+    REAL Z(MAXB/2,0:((MNAUF+3)*(MNAUF+4))/2)
+
+    !      LOGICAL*1 USED(((216*217)/2+1)*160)
+
+    REAL CXMN(0:(MNAUF+1)*(MNAUF+2)-1,MLEVEL)
+    REAL FELD(MAXL,MLEVEL)
+    REAL WSAVE(8*MAXB+15,MAXB/2)
+    INTEGER IFAX(10,MAXB)
+    REAL W(MAXB)
+    INTEGER IND(MAXB)
+
+    ALLOCATE(CXM( 4*MAXB,MAXB))
+    DO  J=1,MAXB/2
+       CXMS(1:MLAT(J))=FELD(IND(J)+1:IND(J)+MLAT(J),L)
+       CALL RFOUFTR(CXMS,WSAVE(1,J),IFAX(:,J),MNAUF,MLAT(J),1)
+       CXMA(1:MLAT(J))=FELD(MAXL-IND(J)-MLAT(J)+1:MAXL-IND(J),L)
+       CALL RFOUFTR(CXMA, &
+            &WSAVE(1,J),IFAX(:,J),MNAUF,MLAT(J),1)
+       DO  I=1,2*(MNAUF+1)
+          CXM(I,J)=CXMS(I)+CXMA(I)
+          CXM(I,MAXB+1-J)=CXMS(I)-CXMA(I)
+       ENDDO
+    ENDDO
+    CALL LGTR213(CXMN(0,L),CXM,Z,W,MLAT,MNAUF,MAXB)
+
+    DEALLOCATE(CXM)
+
+    RETURN
+  END SUBROUTINE GRPHSUB
+  !
+  SUBROUTINE LGTR213(CXMN,CXM,Z,W,MLAT,MNAUF,MAXB)
+    IMPLICIT REAL (A-H,O-Z)
+    INTEGER MLAT(MAXB)
+    DIMENSION CXM(0:4*MAXB-1,MAXB)
+    DIMENSION CXMN(0:2*(((MNAUF+1)*MNAUF)/2+MNAUF)+1)
+    REAL*8 Z(MAXB/2,0:((MNAUF+3)*(MNAUF+4))/2)
+    REAL*8 W(MAXB),CR,CI,HILF
+    LOGICAL EVEN
+    !
+    !     DIESE ROUTINE BERECHNET DIE KFFKs CXMN
+    !
+    LL=0
+    LLP=0
+    DO  I=0,MNAUF
+       KM=0
+       DO 
+          KM=KM+1
+          IF(MLAT(KM).GT.2*I) THEN
+             EXIT
+          ENDIF
+       ENDDO
+       DO  J=I,MNAUF
+          CR=0
+          CI=0
+          EVEN=MOD(I+J,2).EQ.0
+          IF(EVEN) THEN
+             DO  K=KM,MAXB/2
+                HILF=W(K)*Z(K,LLP)
+                CR=CR+CXM(2*I,K)*HILF
+                CI=CI+CXM(2*I+1,K)*HILF
+             ENDDO
+          ELSE
+             DO  K=KM,MAXB/2
+                HILF=W(K)*Z(K,LLP)
+                CR=CR+CXM(2*I,MAXB+1-K)*HILF
+                CI=CI+CXM(2*I+1,MAXB+1-K)*HILF
+             ENDDO
+          ENDIF
+          CXMN(2*LL)=CR
+          CXMN(2*LL+1)=CI
+          LL=LL+1
+          LLP=LLP+1
+       ENDDO
+       LLP=LLP+2
+    ENDDO
+    RETURN
+  END SUBROUTINE LGTR213
+  !
+
+  !
+  SUBROUTINE RFOUFTR(CXM,TRIGS,IFAX,MNAUF,MAXL,ISIGN)
+    !     BERECHNET DIE FOURIERSUMME MIT EINEM FFT-ALGORITHMUS
+    IMPLICIT REAL (A-H,O-Z)
+    DIMENSION CXM(0:2*MAXL-1)
+    DIMENSION FELD(MAXL),TRIGS(2*MAXL)
+    DIMENSION WSAVE(MAXAUF)
+    INTEGER IFAX(10)
+
+
+    ! NORMIERUNG...
+    WSAVE(1)=CXM(MAXL-1)
+
+    CXM(1:MAXL)=CXM(0:MAXL-1)/2
+    CXM(0)=WSAVE(1)/2
+    CALL FFT99(CXM,WSAVE,TRIGS,IFAX,1,1,MAXL,1,-1)
+    RETURN
+  END SUBROUTINE RFOUFTR
+
+END MODULE GRTOPH
Index: preproc/src/grtoph.mod
===================================================================
--- preproc/src/grtoph.mod	(revision 57637935b8c736ecb0a376df5e8f6a044bbd05af)
+++ preproc/src/grtoph.mod	(revision 57637935b8c736ecb0a376df5e8f6a044bbd05af)
@@ -0,0 +1,671 @@
+GFORTRAN module version '10' created from grphreal.f90
+MD5:d1715507b1f5a4e089a466f4ce778d4d -- If you edit this, you'll get what you deserve.
+
+(() () () () () () () () () () () () () () () () () () () () () () ()
+() () () ())
+
+()
+
+()
+
+()
+
+()
+
+()
+
+(2 'dplgnd' 'phtogr' '' 1 ((PROCEDURE UNKNOWN-INTENT MODULE-PROC DECL
+UNKNOWN 0 0 SUBROUTINE) (UNKNOWN 0 0 0 0 UNKNOWN ()) 3 0 (4 5 6) () 0 ()
+() () 0 0)
+7 'gauleg' 'phtogr' '' 1 ((PROCEDURE UNKNOWN-INTENT MODULE-PROC DECL
+UNKNOWN 0 0 SUBROUTINE IMPLICIT_PURE) (UNKNOWN 0 0 0 0 UNKNOWN ()) 8 0 (
+9 10 11 12 13) () 0 () () () 0 0)
+14 'grph213' 'grtoph' '' 1 ((PROCEDURE UNKNOWN-INTENT MODULE-PROC DECL
+UNKNOWN 0 0 SUBROUTINE) (UNKNOWN 0 0 0 0 UNKNOWN ()) 15 0 (16 17 18 19
+20 21 22 23 24 25 26) () 0 () () () 0 0)
+27 'grphsub' 'grtoph' '' 1 ((PROCEDURE UNKNOWN-INTENT MODULE-PROC DECL
+UNKNOWN 0 0 SUBROUTINE) (UNKNOWN 0 0 0 0 UNKNOWN ()) 28 0 (29 30 31 32
+33 34 35 36 37 38 39 40 41) () 0 () () () 0 0)
+42 'grtoph' 'grtoph' '' 1 ((MODULE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0) (UNKNOWN 0 0 0 0 UNKNOWN ()) 0 0 () () 0 () () () 0 0)
+43 'legtr' 'phtogr' '' 1 ((PROCEDURE UNKNOWN-INTENT MODULE-PROC DECL
+UNKNOWN 0 0 SUBROUTINE) (UNKNOWN 0 0 0 0 UNKNOWN ()) 44 0 (45 46 47 48
+49) () 0 () () () 0 0)
+50 'lgtr213' 'grtoph' '' 1 ((PROCEDURE UNKNOWN-INTENT MODULE-PROC DECL
+UNKNOWN 0 0 SUBROUTINE) (UNKNOWN 0 0 0 0 UNKNOWN ()) 51 0 (52 53 54 55
+56 57 58) () 0 () () () 0 0)
+59 'maxauf' 'phtogr' '' 1 ((PARAMETER UNKNOWN-INTENT UNKNOWN-PROC
+UNKNOWN IMPLICIT-SAVE 0 0) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () (
+CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '36000') () 0 () () () 0 0)
+60 'phgcut' 'phtogr' '' 1 ((PROCEDURE UNKNOWN-INTENT MODULE-PROC DECL
+UNKNOWN 0 0 SUBROUTINE) (UNKNOWN 0 0 0 0 UNKNOWN ()) 61 0 (62 63 64 65
+66 67 68 69 70 71 72 73) () 0 () () () 0 0)
+74 'phgpns' 'phtogr' '' 1 ((PROCEDURE UNKNOWN-INTENT MODULE-PROC DECL
+UNKNOWN 0 0 SUBROUTINE) (UNKNOWN 0 0 0 0 UNKNOWN ()) 75 0 (76 77 78 79
+80 81 82 83 84 85 86 87) () 0 () () () 0 0)
+88 'phgr213' 'phtogr' '' 1 ((PROCEDURE UNKNOWN-INTENT MODULE-PROC DECL
+UNKNOWN 0 0 SUBROUTINE) (UNKNOWN 0 0 0 0 UNKNOWN ()) 89 0 (90 91 92 93
+94 95 96 97 98 99) () 0 () () () 0 0)
+100 'phsym' 'phtogr' '' 1 ((PROCEDURE UNKNOWN-INTENT MODULE-PROC DECL
+UNKNOWN 0 0 SUBROUTINE) (UNKNOWN 0 0 0 0 UNKNOWN ()) 101 0 (102 103 104
+105 106 107 108 109 110 111 112 113) () 0 () () () 0 0)
+114 'phsymcut' 'phtogr' '' 1 ((PROCEDURE UNKNOWN-INTENT MODULE-PROC DECL
+UNKNOWN 0 0 SUBROUTINE) (UNKNOWN 0 0 0 0 UNKNOWN ()) 115 0 (116 117 118
+119 120 121 122 123 124 125 126 127) () 0 () () () 0 0)
+128 'phtogr' 'phtogr' '' 1 ((MODULE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0) (UNKNOWN 0 0 0 0 UNKNOWN ()) 0 0 () () 0 () () () 0 0)
+129 'plgnfa' 'phtogr' '' 1 ((PROCEDURE UNKNOWN-INTENT MODULE-PROC DECL
+UNKNOWN 0 0 SUBROUTINE IMPLICIT_PURE) (UNKNOWN 0 0 0 0 UNKNOWN ()) 130 0
+(131 132 133) () 0 () () () 0 0)
+134 'rfouftr' 'grtoph' '' 1 ((PROCEDURE UNKNOWN-INTENT MODULE-PROC DECL
+UNKNOWN 0 0 SUBROUTINE) (UNKNOWN 0 0 0 0 UNKNOWN ()) 135 0 (136 137 138
+139 140 141) () 0 () () () 0 0)
+142 'rfourtr' 'phtogr' '' 1 ((PROCEDURE UNKNOWN-INTENT MODULE-PROC DECL
+UNKNOWN 0 0 SUBROUTINE) (UNKNOWN 0 0 0 0 UNKNOWN ()) 143 0 (144 145 146
+147 148) () 0 () () () 0 0)
+149 'spfilter' 'phtogr' '' 1 ((PROCEDURE UNKNOWN-INTENT MODULE-PROC DECL
+UNKNOWN 0 0 SUBROUTINE IMPLICIT_PURE) (UNKNOWN 0 0 0 0 UNKNOWN ()) 150 0
+(151 152 153) () 0 () () () 0 0)
+4 'mnauf' '' '' 3 ((VARIABLE IN UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 DUMMY)
+(INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+5 'z' '' '' 3 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN 0 0
+DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (1 0 EXPLICIT (CONSTANT (
+INTEGER 4 0 0 0 INTEGER ()) 0 '0') (OP (INTEGER 4 0 0 0 INTEGER ()) 0
+DIVIDE (OP (INTEGER 4 0 0 0 INTEGER ()) 0 PARENTHESES (OP (INTEGER 4 0 0
+0 INTEGER ()) 0 TIMES (OP (INTEGER 4 0 0 0 INTEGER ()) 0 PARENTHESES (
+OP (INTEGER 4 0 0 0 INTEGER ()) 0 PLUS (VARIABLE (INTEGER 4 0 0 0
+INTEGER ()) 0 4 ()) (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '3'))) (OP
+(INTEGER 4 0 0 0 INTEGER ()) 0 PARENTHESES (OP (INTEGER 4 0 0 0 INTEGER
+()) 0 PLUS (VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 4 ()) (CONSTANT (
+INTEGER 4 0 0 0 INTEGER ()) 0 '4'))))) (CONSTANT (INTEGER 4 0 0 0
+INTEGER ()) 0 '2'))) 0 () () () 0 0)
+6 'dz' '' '' 3 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN 0
+0 DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (1 0 EXPLICIT (
+CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '0') (OP (INTEGER 4 0 0 0
+INTEGER ()) 0 DIVIDE (OP (INTEGER 4 0 0 0 INTEGER ()) 0 PARENTHESES (OP
+(INTEGER 4 0 0 0 INTEGER ()) 0 TIMES (OP (INTEGER 4 0 0 0 INTEGER ()) 0
+PARENTHESES (OP (INTEGER 4 0 0 0 INTEGER ()) 0 PLUS (VARIABLE (INTEGER 4
+0 0 0 INTEGER ()) 0 4 ()) (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '2')))
+(OP (INTEGER 4 0 0 0 INTEGER ()) 0 PARENTHESES (OP (INTEGER 4 0 0 0
+INTEGER ()) 0 PLUS (VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 4 ()) (
+CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '3'))))) (CONSTANT (INTEGER 4 0
+0 0 INTEGER ()) 0 '2'))) 0 () () () 0 0)
+9 'x1' '' '' 8 ((VARIABLE IN UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 DUMMY) (
+REAL 8 0 0 0 REAL ()) 0 0 () () 0 () () () 0 0)
+10 'x2' '' '' 8 ((VARIABLE IN UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 DUMMY) (
+REAL 8 0 0 0 REAL ()) 0 0 () () 0 () () () 0 0)
+11 'x' '' '' 8 ((VARIABLE OUT UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 DIMENSION
+DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (1 0 EXPLICIT (CONSTANT (INTEGER 4
+0 0 0 INTEGER ()) 0 '1') (VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 13 ()))
+0 () () () 0 0)
+12 'w' '' '' 8 ((VARIABLE OUT UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 DIMENSION
+DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (1 0 EXPLICIT (CONSTANT (INTEGER 4
+0 0 0 INTEGER ()) 0 '1') (VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 13 ()))
+0 () () () 0 0)
+13 'n' '' '' 8 ((VARIABLE IN UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 DUMMY) (
+INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+16 'cxmn' '' '' 15 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0 DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (2 0 EXPLICIT
+(CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '0') (OP (INTEGER 4 0 0 0
+INTEGER ()) 0 MINUS (OP (INTEGER 4 0 0 0 INTEGER ()) 0 TIMES (OP (
+INTEGER 4 0 0 0 INTEGER ()) 0 PARENTHESES (OP (INTEGER 4 0 0 0 INTEGER ())
+0 PLUS (VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 23 ()) (CONSTANT (
+INTEGER 4 0 0 0 INTEGER ()) 0 '1'))) (OP (INTEGER 4 0 0 0 INTEGER ()) 0
+PARENTHESES (OP (INTEGER 4 0 0 0 INTEGER ()) 0 PLUS (VARIABLE (INTEGER 4
+0 0 0 INTEGER ()) 0 23 ()) (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '2'))))
+(CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1')) (CONSTANT (INTEGER 4 0 0
+0 INTEGER ()) 0 '1') (VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 26 ())) 0
+() () () 0 0)
+17 'feld' '' '' 15 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0 DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (2 0 EXPLICIT
+(CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (VARIABLE (INTEGER 4 0 0 0
+INTEGER ()) 0 24 ()) (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (
+VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 26 ())) 0 () () () 0 0)
+18 'wsave' '' '' 15 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0 DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (2 0 EXPLICIT
+(CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (OP (INTEGER 4 0 0 0
+INTEGER ()) 0 PLUS (OP (INTEGER 4 0 0 0 INTEGER ()) 0 TIMES (CONSTANT (
+INTEGER 4 0 0 0 INTEGER ()) 0 '8') (VARIABLE (INTEGER 4 0 0 0 INTEGER ())
+0 25 ())) (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '15')) (CONSTANT (
+INTEGER 4 0 0 0 INTEGER ()) 0 '1') (OP (INTEGER 4 0 0 0 INTEGER ()) 0
+DIVIDE (VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 25 ()) (CONSTANT (
+INTEGER 4 0 0 0 INTEGER ()) 0 '2'))) 0 () () () 0 0)
+19 'ifax' '' '' 15 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0 DIMENSION DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () (2 0
+EXPLICIT (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (CONSTANT (
+INTEGER 4 0 0 0 INTEGER ()) 0 '10') (CONSTANT (INTEGER 4 0 0 0 INTEGER ())
+0 '1') (VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 25 ())) 0 () () () 0 0)
+20 'z' '' '' 15 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN 0
+0 DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (2 0 EXPLICIT (
+CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (OP (INTEGER 4 0 0 0
+INTEGER ()) 0 DIVIDE (VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 25 ()) (
+CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '2')) (CONSTANT (INTEGER 4 0 0 0
+INTEGER ()) 0 '0') (OP (INTEGER 4 0 0 0 INTEGER ()) 0 DIVIDE (OP (
+INTEGER 4 0 0 0 INTEGER ()) 0 PARENTHESES (OP (INTEGER 4 0 0 0 INTEGER ())
+0 TIMES (OP (INTEGER 4 0 0 0 INTEGER ()) 0 PARENTHESES (OP (INTEGER 4 0
+0 0 INTEGER ()) 0 PLUS (VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 23 ()) (
+CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '3'))) (OP (INTEGER 4 0 0 0
+INTEGER ()) 0 PARENTHESES (OP (INTEGER 4 0 0 0 INTEGER ()) 0 PLUS (
+VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 23 ()) (CONSTANT (INTEGER 4 0 0
+0 INTEGER ()) 0 '4'))))) (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '2')))
+0 () () () 0 0)
+21 'w' '' '' 15 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN 0
+0 DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (1 0 EXPLICIT (
+CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (VARIABLE (INTEGER 4 0 0 0
+INTEGER ()) 0 25 ())) 0 () () () 0 0)
+22 'mlat' '' '' 15 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0 DIMENSION DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () (1 0
+EXPLICIT (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (VARIABLE (
+INTEGER 4 0 0 0 INTEGER ()) 0 25 ())) 0 () () () 0 0)
+23 'mnauf' '' '' 15 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0 DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+24 'maxl' '' '' 15 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0 DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+25 'maxb' '' '' 15 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0 DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+26 'mlevel' '' '' 15 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0 DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+29 'l' '' '' 28 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN 0
+0 DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+30 'ind' '' '' 28 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN
+0 0 DIMENSION DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () (1 0 EXPLICIT (
+CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (VARIABLE (INTEGER 4 0 0 0
+INTEGER ()) 0 40 ())) 0 () () () 0 0)
+31 'cxmn' '' '' 28 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0 DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (2 0 EXPLICIT
+(CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '0') (OP (INTEGER 4 0 0 0
+INTEGER ()) 0 MINUS (OP (INTEGER 4 0 0 0 INTEGER ()) 0 TIMES (OP (
+INTEGER 4 0 0 0 INTEGER ()) 0 PARENTHESES (OP (INTEGER 4 0 0 0 INTEGER ())
+0 PLUS (VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 38 ()) (CONSTANT (
+INTEGER 4 0 0 0 INTEGER ()) 0 '1'))) (OP (INTEGER 4 0 0 0 INTEGER ()) 0
+PARENTHESES (OP (INTEGER 4 0 0 0 INTEGER ()) 0 PLUS (VARIABLE (INTEGER 4
+0 0 0 INTEGER ()) 0 38 ()) (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '2'))))
+(CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1')) (CONSTANT (INTEGER 4 0 0
+0 INTEGER ()) 0 '1') (VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 41 ())) 0
+() () () 0 0)
+32 'feld' '' '' 28 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0 DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (2 0 EXPLICIT
+(CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (VARIABLE (INTEGER 4 0 0 0
+INTEGER ()) 0 39 ()) (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (
+VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 41 ())) 0 () () () 0 0)
+33 'wsave' '' '' 28 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0 DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (2 0 EXPLICIT
+(CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (OP (INTEGER 4 0 0 0
+INTEGER ()) 0 PLUS (OP (INTEGER 4 0 0 0 INTEGER ()) 0 TIMES (CONSTANT (
+INTEGER 4 0 0 0 INTEGER ()) 0 '8') (VARIABLE (INTEGER 4 0 0 0 INTEGER ())
+0 40 ())) (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '15')) (CONSTANT (
+INTEGER 4 0 0 0 INTEGER ()) 0 '1') (OP (INTEGER 4 0 0 0 INTEGER ()) 0
+DIVIDE (VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 40 ()) (CONSTANT (
+INTEGER 4 0 0 0 INTEGER ()) 0 '2'))) 0 () () () 0 0)
+34 'ifax' '' '' 28 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0 DIMENSION DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () (2 0
+EXPLICIT (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (CONSTANT (
+INTEGER 4 0 0 0 INTEGER ()) 0 '10') (CONSTANT (INTEGER 4 0 0 0 INTEGER ())
+0 '1') (VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 40 ())) 0 () () () 0 0)
+35 'z' '' '' 28 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN 0
+0 DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (2 0 EXPLICIT (
+CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (OP (INTEGER 4 0 0 0
+INTEGER ()) 0 DIVIDE (VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 40 ()) (
+CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '2')) (CONSTANT (INTEGER 4 0 0 0
+INTEGER ()) 0 '0') (OP (INTEGER 4 0 0 0 INTEGER ()) 0 DIVIDE (OP (
+INTEGER 4 0 0 0 INTEGER ()) 0 PARENTHESES (OP (INTEGER 4 0 0 0 INTEGER ())
+0 TIMES (OP (INTEGER 4 0 0 0 INTEGER ()) 0 PARENTHESES (OP (INTEGER 4 0
+0 0 INTEGER ()) 0 PLUS (VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 38 ()) (
+CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '3'))) (OP (INTEGER 4 0 0 0
+INTEGER ()) 0 PARENTHESES (OP (INTEGER 4 0 0 0 INTEGER ()) 0 PLUS (
+VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 38 ()) (CONSTANT (INTEGER 4 0 0
+0 INTEGER ()) 0 '4'))))) (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '2')))
+0 () () () 0 0)
+36 'w' '' '' 28 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN 0
+0 DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (1 0 EXPLICIT (
+CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (VARIABLE (INTEGER 4 0 0 0
+INTEGER ()) 0 40 ())) 0 () () () 0 0)
+37 'mlat' '' '' 28 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0 DIMENSION DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () (1 0
+EXPLICIT (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (VARIABLE (
+INTEGER 4 0 0 0 INTEGER ()) 0 40 ())) 0 () () () 0 0)
+38 'mnauf' '' '' 28 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0 DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+39 'maxl' '' '' 28 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0 DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+40 'maxb' '' '' 28 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0 DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+41 'mlevel' '' '' 28 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0 DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+45 'cxmn' '' '' 44 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0 DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (1 0 EXPLICIT
+(CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '0') (OP (INTEGER 4 0 0 0
+INTEGER ()) 0 MINUS (OP (INTEGER 4 0 0 0 INTEGER ()) 0 TIMES (OP (
+INTEGER 4 0 0 0 INTEGER ()) 0 PARENTHESES (OP (INTEGER 4 0 0 0 INTEGER ())
+0 PLUS (VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 48 ()) (CONSTANT (
+INTEGER 4 0 0 0 INTEGER ()) 0 '1'))) (OP (INTEGER 4 0 0 0 INTEGER ()) 0
+PARENTHESES (OP (INTEGER 4 0 0 0 INTEGER ()) 0 PLUS (VARIABLE (INTEGER 4
+0 0 0 INTEGER ()) 0 48 ()) (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '2'))))
+(CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1'))) 0 () () () 0 0)
+46 'cxm' '' '' 44 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN
+0 0 DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (1 0 EXPLICIT (
+CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '0') (CONSTANT (INTEGER 4 0 0 0
+INTEGER ()) 0 '35999')) 0 () () () 0 0)
+47 'z' '' '' 44 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN 0
+0 DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (1 0 EXPLICIT (
+CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '0') (OP (INTEGER 4 0 0 0
+INTEGER ()) 0 DIVIDE (OP (INTEGER 4 0 0 0 INTEGER ()) 0 PARENTHESES (OP
+(INTEGER 4 0 0 0 INTEGER ()) 0 TIMES (OP (INTEGER 4 0 0 0 INTEGER ()) 0
+PARENTHESES (OP (INTEGER 4 0 0 0 INTEGER ()) 0 PLUS (VARIABLE (INTEGER 4
+0 0 0 INTEGER ()) 0 48 ()) (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '3')))
+(OP (INTEGER 4 0 0 0 INTEGER ()) 0 PARENTHESES (OP (INTEGER 4 0 0 0
+INTEGER ()) 0 PLUS (VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 48 ()) (
+CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '4'))))) (CONSTANT (INTEGER 4 0
+0 0 INTEGER ()) 0 '2'))) 0 () () () 0 0)
+48 'mnauf' '' '' 44 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0 DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+49 'mauf' '' '' 44 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0 DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+52 'cxmn' '' '' 51 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0 DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (1 0 EXPLICIT
+(CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '0') (OP (INTEGER 4 0 0 0
+INTEGER ()) 0 PLUS (OP (INTEGER 4 0 0 0 INTEGER ()) 0 TIMES (CONSTANT (
+INTEGER 4 0 0 0 INTEGER ()) 0 '2') (OP (INTEGER 4 0 0 0 INTEGER ()) 0
+PARENTHESES (OP (INTEGER 4 0 0 0 INTEGER ()) 0 PLUS (OP (INTEGER 4 0 0 0
+INTEGER ()) 0 DIVIDE (OP (INTEGER 4 0 0 0 INTEGER ()) 0 PARENTHESES (OP
+(INTEGER 4 0 0 0 INTEGER ()) 0 TIMES (OP (INTEGER 4 0 0 0 INTEGER ()) 0
+PARENTHESES (OP (INTEGER 4 0 0 0 INTEGER ()) 0 PLUS (VARIABLE (INTEGER 4
+0 0 0 INTEGER ()) 0 57 ()) (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1')))
+(VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 57 ()))) (CONSTANT (INTEGER 4 0
+0 0 INTEGER ()) 0 '2')) (VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 57 ()))))
+(CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1'))) 0 () () () 0 0)
+53 'cxm' '' '' 51 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN
+0 0 DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (2 0 EXPLICIT (
+CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '0') (OP (INTEGER 4 0 0 0
+INTEGER ()) 0 MINUS (OP (INTEGER 4 0 0 0 INTEGER ()) 0 TIMES (CONSTANT (
+INTEGER 4 0 0 0 INTEGER ()) 0 '4') (VARIABLE (INTEGER 4 0 0 0 INTEGER ())
+0 58 ())) (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1')) (CONSTANT (
+INTEGER 4 0 0 0 INTEGER ()) 0 '1') (VARIABLE (INTEGER 4 0 0 0 INTEGER ())
+0 58 ())) 0 () () () 0 0)
+54 'z' '' '' 51 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN 0
+0 DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (2 0 EXPLICIT (
+CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (OP (INTEGER 4 0 0 0
+INTEGER ()) 0 DIVIDE (VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 58 ()) (
+CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '2')) (CONSTANT (INTEGER 4 0 0 0
+INTEGER ()) 0 '0') (OP (INTEGER 4 0 0 0 INTEGER ()) 0 DIVIDE (OP (
+INTEGER 4 0 0 0 INTEGER ()) 0 PARENTHESES (OP (INTEGER 4 0 0 0 INTEGER ())
+0 TIMES (OP (INTEGER 4 0 0 0 INTEGER ()) 0 PARENTHESES (OP (INTEGER 4 0
+0 0 INTEGER ()) 0 PLUS (VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 57 ()) (
+CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '3'))) (OP (INTEGER 4 0 0 0
+INTEGER ()) 0 PARENTHESES (OP (INTEGER 4 0 0 0 INTEGER ()) 0 PLUS (
+VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 57 ()) (CONSTANT (INTEGER 4 0 0
+0 INTEGER ()) 0 '4'))))) (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '2')))
+0 () () () 0 0)
+55 'w' '' '' 51 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN 0
+0 DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (1 0 EXPLICIT (
+CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (VARIABLE (INTEGER 4 0 0 0
+INTEGER ()) 0 58 ())) 0 () () () 0 0)
+56 'mlat' '' '' 51 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0 DIMENSION DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () (1 0
+EXPLICIT (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (VARIABLE (
+INTEGER 4 0 0 0 INTEGER ()) 0 58 ())) 0 () () () 0 0)
+57 'mnauf' '' '' 51 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0 DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+58 'maxb' '' '' 51 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0 DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+62 'cxmn' '' '' 61 ((VARIABLE IN UNKNOWN-PROC UNKNOWN UNKNOWN 0 0
+DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (2 0 EXPLICIT (CONSTANT (
+INTEGER 4 0 0 0 INTEGER ()) 0 '0') (OP (INTEGER 4 0 0 0 INTEGER ()) 0
+MINUS (OP (INTEGER 4 0 0 0 INTEGER ()) 0 TIMES (OP (INTEGER 4 0 0 0
+INTEGER ()) 0 PARENTHESES (OP (INTEGER 4 0 0 0 INTEGER ()) 0 PLUS (
+VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 68 ()) (CONSTANT (INTEGER 4 0 0
+0 INTEGER ()) 0 '1'))) (OP (INTEGER 4 0 0 0 INTEGER ()) 0 PARENTHESES (
+OP (INTEGER 4 0 0 0 INTEGER ()) 0 PLUS (VARIABLE (INTEGER 4 0 0 0
+INTEGER ()) 0 68 ()) (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '2')))) (
+CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1')) (CONSTANT (INTEGER 4 0 0 0
+INTEGER ()) 0 '1') (VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 73 ())) 0 ()
+() () 0 0)
+63 'feld' '' '' 61 ((VARIABLE OUT UNKNOWN-PROC UNKNOWN UNKNOWN 0 0
+DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (3 0 EXPLICIT (CONSTANT (
+INTEGER 4 0 0 0 INTEGER ()) 0 '1') (VARIABLE (INTEGER 4 0 0 0 INTEGER ())
+0 71 ()) (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (VARIABLE (
+INTEGER 4 0 0 0 INTEGER ()) 0 72 ()) (CONSTANT (INTEGER 4 0 0 0 INTEGER
+()) 0 '1') (VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 73 ())) 0 () () () 0
+0)
+64 'wsave' '' '' 61 ((VARIABLE INOUT UNKNOWN-PROC UNKNOWN UNKNOWN 0 0
+DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (1 0 EXPLICIT (CONSTANT (
+INTEGER 4 0 0 0 INTEGER ()) 0 '1') (OP (INTEGER 4 0 0 0 INTEGER ()) 0
+PLUS (OP (INTEGER 4 0 0 0 INTEGER ()) 0 TIMES (CONSTANT (INTEGER 4 0 0 0
+INTEGER ()) 0 '4') (VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 69 ())) (
+CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '15'))) 0 () () () 0 0)
+65 'ifax' '' '' 61 ((VARIABLE INOUT UNKNOWN-PROC UNKNOWN UNKNOWN 0 0
+DIMENSION DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () (1 0 EXPLICIT (
+CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (CONSTANT (INTEGER 4 0 0 0
+INTEGER ()) 0 '10')) 0 () () () 0 0)
+66 'z' '' '' 61 ((VARIABLE IN UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 DIMENSION
+DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (2 0 EXPLICIT (CONSTANT (INTEGER 4
+0 0 0 INTEGER ()) 0 '0') (OP (INTEGER 4 0 0 0 INTEGER ()) 0 DIVIDE (OP (
+INTEGER 4 0 0 0 INTEGER ()) 0 PARENTHESES (OP (INTEGER 4 0 0 0 INTEGER ())
+0 TIMES (OP (INTEGER 4 0 0 0 INTEGER ()) 0 PARENTHESES (OP (INTEGER 4 0
+0 0 INTEGER ()) 0 PLUS (VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 68 ()) (
+CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '3'))) (OP (INTEGER 4 0 0 0
+INTEGER ()) 0 PARENTHESES (OP (INTEGER 4 0 0 0 INTEGER ()) 0 PLUS (
+VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 68 ()) (CONSTANT (INTEGER 4 0 0
+0 INTEGER ()) 0 '4'))))) (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '2'))
+(CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (VARIABLE (INTEGER 4 0 0 0
+INTEGER ()) 0 72 ())) 0 () () () 0 0)
+67 'mnauf' '' '' 61 ((VARIABLE IN UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 DUMMY)
+(INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+68 'mmax' '' '' 61 ((VARIABLE IN UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 DUMMY)
+(INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+69 'mauf' '' '' 61 ((VARIABLE IN UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 DUMMY)
+(INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+70 'manf' '' '' 61 ((VARIABLE IN UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 DUMMY)
+(INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+71 'maxl' '' '' 61 ((VARIABLE IN UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 DUMMY)
+(INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+72 'maxb' '' '' 61 ((VARIABLE IN UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 DUMMY)
+(INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+73 'mlevel' '' '' 61 ((VARIABLE IN UNKNOWN-PROC UNKNOWN UNKNOWN 0 0
+DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+76 'cxmn' '' '' 75 ((VARIABLE IN UNKNOWN-PROC UNKNOWN UNKNOWN 0 0
+DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (2 0 EXPLICIT (CONSTANT (
+INTEGER 4 0 0 0 INTEGER ()) 0 '0') (OP (INTEGER 4 0 0 0 INTEGER ()) 0
+MINUS (OP (INTEGER 4 0 0 0 INTEGER ()) 0 TIMES (OP (INTEGER 4 0 0 0
+INTEGER ()) 0 PARENTHESES (OP (INTEGER 4 0 0 0 INTEGER ()) 0 PLUS (
+VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 82 ()) (CONSTANT (INTEGER 4 0 0
+0 INTEGER ()) 0 '1'))) (OP (INTEGER 4 0 0 0 INTEGER ()) 0 PARENTHESES (
+OP (INTEGER 4 0 0 0 INTEGER ()) 0 PLUS (VARIABLE (INTEGER 4 0 0 0
+INTEGER ()) 0 82 ()) (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '2')))) (
+CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1')) (CONSTANT (INTEGER 4 0 0 0
+INTEGER ()) 0 '1') (VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 87 ())) 0 ()
+() () 0 0)
+77 'feld' '' '' 75 ((VARIABLE OUT UNKNOWN-PROC UNKNOWN UNKNOWN 0 0
+DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (3 0 EXPLICIT (CONSTANT (
+INTEGER 4 0 0 0 INTEGER ()) 0 '1') (VARIABLE (INTEGER 4 0 0 0 INTEGER ())
+0 85 ()) (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (VARIABLE (
+INTEGER 4 0 0 0 INTEGER ()) 0 86 ()) (CONSTANT (INTEGER 4 0 0 0 INTEGER
+()) 0 '1') (VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 87 ())) 0 () () () 0
+0)
+78 'z' '' '' 75 ((VARIABLE IN UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 DIMENSION
+DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (2 0 EXPLICIT (CONSTANT (INTEGER 4
+0 0 0 INTEGER ()) 0 '0') (OP (INTEGER 4 0 0 0 INTEGER ()) 0 DIVIDE (OP (
+INTEGER 4 0 0 0 INTEGER ()) 0 PARENTHESES (OP (INTEGER 4 0 0 0 INTEGER ())
+0 TIMES (OP (INTEGER 4 0 0 0 INTEGER ()) 0 PARENTHESES (OP (INTEGER 4 0
+0 0 INTEGER ()) 0 PLUS (VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 82 ()) (
+CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '3'))) (OP (INTEGER 4 0 0 0
+INTEGER ()) 0 PARENTHESES (OP (INTEGER 4 0 0 0 INTEGER ()) 0 PLUS (
+VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 82 ()) (CONSTANT (INTEGER 4 0 0
+0 INTEGER ()) 0 '4'))))) (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '2'))
+(CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (VARIABLE (INTEGER 4 0 0 0
+INTEGER ()) 0 86 ())) 0 () () () 0 0)
+79 'wsave' '' '' 75 ((VARIABLE INOUT UNKNOWN-PROC UNKNOWN UNKNOWN 0 0
+DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (1 0 EXPLICIT (CONSTANT (
+INTEGER 4 0 0 0 INTEGER ()) 0 '1') (OP (INTEGER 4 0 0 0 INTEGER ()) 0
+PLUS (OP (INTEGER 4 0 0 0 INTEGER ()) 0 TIMES (CONSTANT (INTEGER 4 0 0 0
+INTEGER ()) 0 '4') (VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 83 ())) (
+CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '15'))) 0 () () () 0 0)
+80 'ifax' '' '' 75 ((VARIABLE IN UNKNOWN-PROC UNKNOWN UNKNOWN 0 0
+DIMENSION DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () (1 0 EXPLICIT (
+CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (CONSTANT (INTEGER 4 0 0 0
+INTEGER ()) 0 '10')) 0 () () () 0 0)
+81 'j' '' '' 75 ((VARIABLE IN UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 DUMMY) (
+INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+82 'mnauf' '' '' 75 ((VARIABLE IN UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 DUMMY)
+(INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+83 'mauf' '' '' 75 ((VARIABLE IN UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 DUMMY)
+(INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+84 'manf' '' '' 75 ((VARIABLE IN UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 DUMMY)
+(INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+85 'maxl' '' '' 75 ((VARIABLE IN UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 DUMMY)
+(INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+86 'maxb' '' '' 75 ((VARIABLE IN UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 DUMMY)
+(INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+87 'mlevel' '' '' 75 ((VARIABLE IN UNKNOWN-PROC UNKNOWN UNKNOWN 0 0
+DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+90 'cxmn' '' '' 89 ((VARIABLE IN UNKNOWN-PROC UNKNOWN UNKNOWN 0 0
+DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (2 0 EXPLICIT (CONSTANT (
+INTEGER 4 0 0 0 INTEGER ()) 0 '0') (OP (INTEGER 4 0 0 0 INTEGER ()) 0
+MINUS (OP (INTEGER 4 0 0 0 INTEGER ()) 0 TIMES (OP (INTEGER 4 0 0 0
+INTEGER ()) 0 PARENTHESES (OP (INTEGER 4 0 0 0 INTEGER ()) 0 PLUS (
+VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 96 ()) (CONSTANT (INTEGER 4 0 0
+0 INTEGER ()) 0 '1'))) (OP (INTEGER 4 0 0 0 INTEGER ()) 0 PARENTHESES (
+OP (INTEGER 4 0 0 0 INTEGER ()) 0 PLUS (VARIABLE (INTEGER 4 0 0 0
+INTEGER ()) 0 96 ()) (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '2')))) (
+CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1')) (CONSTANT (INTEGER 4 0 0 0
+INTEGER ()) 0 '1') (VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 99 ())) 0 ()
+() () 0 0)
+91 'feld' '' '' 89 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0 DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (2 0 EXPLICIT
+(CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (VARIABLE (INTEGER 4 0 0 0
+INTEGER ()) 0 97 ()) (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (
+VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 99 ())) 0 () () () 0 0)
+92 'wsave' '' '' 89 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0 DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (2 0 EXPLICIT
+(CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (OP (INTEGER 4 0 0 0
+INTEGER ()) 0 PLUS (OP (INTEGER 4 0 0 0 INTEGER ()) 0 TIMES (CONSTANT (
+INTEGER 4 0 0 0 INTEGER ()) 0 '8') (VARIABLE (INTEGER 4 0 0 0 INTEGER ())
+0 98 ())) (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '15')) (CONSTANT (
+INTEGER 4 0 0 0 INTEGER ()) 0 '1') (OP (INTEGER 4 0 0 0 INTEGER ()) 0
+DIVIDE (VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 98 ()) (CONSTANT (
+INTEGER 4 0 0 0 INTEGER ()) 0 '2'))) 0 () () () 0 0)
+93 'ifax' '' '' 89 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0 DIMENSION DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () (2 0
+EXPLICIT (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (CONSTANT (
+INTEGER 4 0 0 0 INTEGER ()) 0 '10') (CONSTANT (INTEGER 4 0 0 0 INTEGER ())
+0 '1') (VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 98 ())) 0 () () () 0 0)
+94 'z' '' '' 89 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN 0
+0 DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (2 0 EXPLICIT (
+CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '0') (OP (INTEGER 4 0 0 0
+INTEGER ()) 0 DIVIDE (OP (INTEGER 4 0 0 0 INTEGER ()) 0 PARENTHESES (OP
+(INTEGER 4 0 0 0 INTEGER ()) 0 TIMES (OP (INTEGER 4 0 0 0 INTEGER ()) 0
+PARENTHESES (OP (INTEGER 4 0 0 0 INTEGER ()) 0 PLUS (VARIABLE (INTEGER 4
+0 0 0 INTEGER ()) 0 96 ()) (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '3')))
+(OP (INTEGER 4 0 0 0 INTEGER ()) 0 PARENTHESES (OP (INTEGER 4 0 0 0
+INTEGER ()) 0 PLUS (VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 96 ()) (
+CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '4'))))) (CONSTANT (INTEGER 4 0
+0 0 INTEGER ()) 0 '2')) (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (
+OP (INTEGER 4 0 0 0 INTEGER ()) 0 DIVIDE (VARIABLE (INTEGER 4 0 0 0
+INTEGER ()) 0 98 ()) (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '2'))) 0 ()
+() () 0 0)
+95 'mlat' '' '' 89 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0 DIMENSION DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () (1 0
+EXPLICIT (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (OP (INTEGER 4 0
+0 0 INTEGER ()) 0 DIVIDE (VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 98 ())
+(CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '2'))) 0 () () () 0 0)
+96 'mnauf' '' '' 89 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0 DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+97 'maxl' '' '' 89 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0 DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+98 'maxb' '' '' 89 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0 DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+99 'mlevel' '' '' 89 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0 DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+102 'k' '' '' 101 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN
+0 0 DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+103 'ind' '' '' 101 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0 DIMENSION DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () (1 0
+EXPLICIT (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (VARIABLE (
+INTEGER 4 0 0 0 INTEGER ()) 0 112 ())) 0 () () () 0 0)
+104 'cxmn' '' '' 101 ((VARIABLE IN UNKNOWN-PROC UNKNOWN UNKNOWN 0 0
+DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (2 0 EXPLICIT (CONSTANT (
+INTEGER 4 0 0 0 INTEGER ()) 0 '0') (OP (INTEGER 4 0 0 0 INTEGER ()) 0
+MINUS (OP (INTEGER 4 0 0 0 INTEGER ()) 0 TIMES (OP (INTEGER 4 0 0 0
+INTEGER ()) 0 PARENTHESES (OP (INTEGER 4 0 0 0 INTEGER ()) 0 PLUS (
+VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 110 ()) (CONSTANT (INTEGER 4 0 0
+0 INTEGER ()) 0 '1'))) (OP (INTEGER 4 0 0 0 INTEGER ()) 0 PARENTHESES (
+OP (INTEGER 4 0 0 0 INTEGER ()) 0 PLUS (VARIABLE (INTEGER 4 0 0 0
+INTEGER ()) 0 110 ()) (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '2')))) (
+CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1')) (CONSTANT (INTEGER 4 0 0 0
+INTEGER ()) 0 '1') (VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 113 ())) 0 ()
+() () 0 0)
+105 'feld' '' '' 101 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0 DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (2 0 EXPLICIT
+(CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (VARIABLE (INTEGER 4 0 0 0
+INTEGER ()) 0 111 ()) (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (
+VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 113 ())) 0 () () () 0 0)
+106 'z' '' '' 101 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN
+0 0 DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (2 0 EXPLICIT (
+CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '0') (OP (INTEGER 4 0 0 0
+INTEGER ()) 0 DIVIDE (OP (INTEGER 4 0 0 0 INTEGER ()) 0 PARENTHESES (OP
+(INTEGER 4 0 0 0 INTEGER ()) 0 TIMES (OP (INTEGER 4 0 0 0 INTEGER ()) 0
+PARENTHESES (OP (INTEGER 4 0 0 0 INTEGER ()) 0 PLUS (VARIABLE (INTEGER 4
+0 0 0 INTEGER ()) 0 110 ()) (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '3')))
+(OP (INTEGER 4 0 0 0 INTEGER ()) 0 PARENTHESES (OP (INTEGER 4 0 0 0
+INTEGER ()) 0 PLUS (VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 110 ()) (
+CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '4'))))) (CONSTANT (INTEGER 4 0
+0 0 INTEGER ()) 0 '2')) (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (
+OP (INTEGER 4 0 0 0 INTEGER ()) 0 DIVIDE (VARIABLE (INTEGER 4 0 0 0
+INTEGER ()) 0 112 ()) (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '2'))) 0
+() () () 0 0)
+107 'wsave' '' '' 101 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0 DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (2 0 EXPLICIT
+(CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (OP (INTEGER 4 0 0 0
+INTEGER ()) 0 PLUS (OP (INTEGER 4 0 0 0 INTEGER ()) 0 TIMES (CONSTANT (
+INTEGER 4 0 0 0 INTEGER ()) 0 '8') (VARIABLE (INTEGER 4 0 0 0 INTEGER ())
+0 112 ())) (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '15')) (CONSTANT (
+INTEGER 4 0 0 0 INTEGER ()) 0 '1') (OP (INTEGER 4 0 0 0 INTEGER ()) 0
+DIVIDE (VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 112 ()) (CONSTANT (
+INTEGER 4 0 0 0 INTEGER ()) 0 '2'))) 0 () () () 0 0)
+108 'ifax' '' '' 101 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0 DIMENSION DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () (2 0
+EXPLICIT (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (CONSTANT (
+INTEGER 4 0 0 0 INTEGER ()) 0 '10') (CONSTANT (INTEGER 4 0 0 0 INTEGER ())
+0 '1') (VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 112 ())) 0 () () () 0 0)
+109 'mlat' '' '' 101 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0 DIMENSION DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () (1 0
+EXPLICIT (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (OP (INTEGER 4 0
+0 0 INTEGER ()) 0 DIVIDE (VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 112 ())
+(CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '2'))) 0 () () () 0 0)
+110 'mnauf' '' '' 101 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0 DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+111 'maxl' '' '' 101 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0 DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+112 'maxb' '' '' 101 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0 DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+113 'mlevel' '' '' 101 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0 DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+116 'j' '' '' 115 ((VARIABLE IN UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 DUMMY)
+(INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+117 'cxmn' '' '' 115 ((VARIABLE IN UNKNOWN-PROC UNKNOWN UNKNOWN 0 0
+DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (2 0 EXPLICIT (CONSTANT (
+INTEGER 4 0 0 0 INTEGER ()) 0 '0') (OP (INTEGER 4 0 0 0 INTEGER ()) 0
+MINUS (OP (INTEGER 4 0 0 0 INTEGER ()) 0 TIMES (OP (INTEGER 4 0 0 0
+INTEGER ()) 0 PARENTHESES (OP (INTEGER 4 0 0 0 INTEGER ()) 0 PLUS (
+VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 123 ()) (CONSTANT (INTEGER 4 0 0
+0 INTEGER ()) 0 '1'))) (OP (INTEGER 4 0 0 0 INTEGER ()) 0 PARENTHESES (
+OP (INTEGER 4 0 0 0 INTEGER ()) 0 PLUS (VARIABLE (INTEGER 4 0 0 0
+INTEGER ()) 0 123 ()) (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '2')))) (
+CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1')) (CONSTANT (INTEGER 4 0 0 0
+INTEGER ()) 0 '1') (VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 126 ())) 0 ()
+() () 0 0)
+118 'feld' '' '' 115 ((VARIABLE OUT UNKNOWN-PROC UNKNOWN UNKNOWN 0 0
+DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (3 0 EXPLICIT (CONSTANT (
+INTEGER 4 0 0 0 INTEGER ()) 0 '1') (VARIABLE (INTEGER 4 0 0 0 INTEGER ())
+0 124 ()) (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (VARIABLE (
+INTEGER 4 0 0 0 INTEGER ()) 0 125 ()) (CONSTANT (INTEGER 4 0 0 0 INTEGER
+()) 0 '1') (VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 126 ())) 0 () () ()
+0 0)
+119 'z' '' '' 115 ((VARIABLE IN UNKNOWN-PROC UNKNOWN UNKNOWN 0 0
+DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (2 0 EXPLICIT (CONSTANT (
+INTEGER 4 0 0 0 INTEGER ()) 0 '0') (OP (INTEGER 4 0 0 0 INTEGER ()) 0
+DIVIDE (OP (INTEGER 4 0 0 0 INTEGER ()) 0 PARENTHESES (OP (INTEGER 4 0 0
+0 INTEGER ()) 0 TIMES (OP (INTEGER 4 0 0 0 INTEGER ()) 0 PARENTHESES (
+OP (INTEGER 4 0 0 0 INTEGER ()) 0 PLUS (VARIABLE (INTEGER 4 0 0 0
+INTEGER ()) 0 123 ()) (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '3'))) (
+OP (INTEGER 4 0 0 0 INTEGER ()) 0 PARENTHESES (OP (INTEGER 4 0 0 0
+INTEGER ()) 0 PLUS (VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 123 ()) (
+CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '4'))))) (CONSTANT (INTEGER 4 0
+0 0 INTEGER ()) 0 '2')) (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (
+VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 125 ())) 0 () () () 0 0)
+120 'wsave' '' '' 115 ((VARIABLE INOUT UNKNOWN-PROC UNKNOWN UNKNOWN 0 0
+DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (1 0 EXPLICIT (CONSTANT (
+INTEGER 4 0 0 0 INTEGER ()) 0 '1') (OP (INTEGER 4 0 0 0 INTEGER ()) 0
+PLUS (OP (INTEGER 4 0 0 0 INTEGER ()) 0 TIMES (CONSTANT (INTEGER 4 0 0 0
+INTEGER ()) 0 '4') (VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 122 ())) (
+CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '15'))) 0 () () () 0 0)
+121 'ifax' '' '' 115 ((VARIABLE IN UNKNOWN-PROC UNKNOWN UNKNOWN 0 0
+DIMENSION DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () (1 0 EXPLICIT (
+CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (CONSTANT (INTEGER 4 0 0 0
+INTEGER ()) 0 '10')) 0 () () () 0 0)
+122 'mauf' '' '' 115 ((VARIABLE IN UNKNOWN-PROC UNKNOWN UNKNOWN 0 0
+DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+123 'mnauf' '' '' 115 ((VARIABLE IN UNKNOWN-PROC UNKNOWN UNKNOWN 0 0
+DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+124 'maxl' '' '' 115 ((VARIABLE IN UNKNOWN-PROC UNKNOWN UNKNOWN 0 0
+DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+125 'maxb' '' '' 115 ((VARIABLE IN UNKNOWN-PROC UNKNOWN UNKNOWN 0 0
+DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+126 'mlevel' '' '' 115 ((VARIABLE IN UNKNOWN-PROC UNKNOWN UNKNOWN 0 0
+DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+127 'manf' '' '' 115 ((VARIABLE IN UNKNOWN-PROC UNKNOWN UNKNOWN 0 0
+DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+131 'll' '' '' 130 ((VARIABLE IN UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 DUMMY)
+(INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+132 'x' '' '' 130 ((VARIABLE IN UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 DUMMY)
+(REAL 8 0 0 0 REAL ()) 0 0 () () 0 () () () 0 0)
+133 'z' '' '' 130 ((VARIABLE OUT UNKNOWN-PROC UNKNOWN UNKNOWN 0 0
+DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (1 0 EXPLICIT (CONSTANT (
+INTEGER 4 0 0 0 INTEGER ()) 0 '0') (OP (INTEGER 4 0 0 0 INTEGER ()) 0
+DIVIDE (OP (INTEGER 4 0 0 0 INTEGER ()) 0 PARENTHESES (OP (INTEGER 4 0 0
+0 INTEGER ()) 0 TIMES (OP (INTEGER 4 0 0 0 INTEGER ()) 0 PARENTHESES (
+OP (INTEGER 4 0 0 0 INTEGER ()) 0 PLUS (VARIABLE (INTEGER 4 0 0 0
+INTEGER ()) 0 131 ()) (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '3'))) (
+OP (INTEGER 4 0 0 0 INTEGER ()) 0 PARENTHESES (OP (INTEGER 4 0 0 0
+INTEGER ()) 0 PLUS (VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 131 ()) (
+CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '4'))))) (CONSTANT (INTEGER 4 0
+0 0 INTEGER ()) 0 '2'))) 0 () () () 0 0)
+136 'cxm' '' '' 135 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0 DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (1 0 EXPLICIT
+(CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '0') (OP (INTEGER 4 0 0 0
+INTEGER ()) 0 MINUS (OP (INTEGER 4 0 0 0 INTEGER ()) 0 TIMES (CONSTANT (
+INTEGER 4 0 0 0 INTEGER ()) 0 '2') (VARIABLE (INTEGER 4 0 0 0 INTEGER ())
+0 140 ())) (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1'))) 0 () () () 0
+0)
+137 'trigs' '' '' 135 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0 DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (1 0 EXPLICIT
+(CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (OP (INTEGER 4 0 0 0
+INTEGER ()) 0 TIMES (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '2') (
+VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 140 ()))) 0 () () () 0 0)
+138 'ifax' '' '' 135 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0 DIMENSION DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () (1 0
+EXPLICIT (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (CONSTANT (
+INTEGER 4 0 0 0 INTEGER ()) 0 '10')) 0 () () () 0 0)
+139 'mnauf' '' '' 135 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0 DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+140 'maxl' '' '' 135 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0 DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+141 'isign' '' '' 135 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0 DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+144 'cxm' '' '' 143 ((VARIABLE INOUT UNKNOWN-PROC UNKNOWN UNKNOWN 0 0
+DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (1 0 EXPLICIT (CONSTANT (
+INTEGER 4 0 0 0 INTEGER ()) 0 '0') (CONSTANT (INTEGER 4 0 0 0 INTEGER ())
+0 '35999')) 0 () () () 0 0)
+145 'trigs' '' '' 143 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0 DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (1 0 EXPLICIT
+(CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (OP (INTEGER 4 0 0 0
+INTEGER ()) 0 TIMES (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '2') (
+VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 148 ()))) 0 () () () 0 0)
+146 'ifax' '' '' 143 ((VARIABLE IN UNKNOWN-PROC UNKNOWN UNKNOWN 0 0
+DIMENSION DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () (1 0 EXPLICIT (
+CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (CONSTANT (INTEGER 4 0 0 0
+INTEGER ()) 0 '10')) 0 () () () 0 0)
+147 'mnauf' '' '' 143 ((VARIABLE IN UNKNOWN-PROC UNKNOWN UNKNOWN 0 0
+DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+148 'maxl' '' '' 143 ((VARIABLE IN UNKNOWN-PROC UNKNOWN UNKNOWN 0 0
+DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+151 'feldmn' '' '' 150 ((VARIABLE INOUT UNKNOWN-PROC UNKNOWN UNKNOWN 0 0
+DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (1 0 EXPLICIT (CONSTANT (
+INTEGER 4 0 0 0 INTEGER ()) 0 '0') (OP (INTEGER 4 0 0 0 INTEGER ()) 0
+MINUS (OP (INTEGER 4 0 0 0 INTEGER ()) 0 TIMES (OP (INTEGER 4 0 0 0
+INTEGER ()) 0 PARENTHESES (OP (INTEGER 4 0 0 0 INTEGER ()) 0 PLUS (
+VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 152 ()) (CONSTANT (INTEGER 4 0 0
+0 INTEGER ()) 0 '1'))) (OP (INTEGER 4 0 0 0 INTEGER ()) 0 PARENTHESES (
+OP (INTEGER 4 0 0 0 INTEGER ()) 0 PLUS (VARIABLE (INTEGER 4 0 0 0
+INTEGER ()) 0 152 ()) (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '2')))) (
+CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1'))) 0 () () () 0 0)
+152 'mm' '' '' 150 ((VARIABLE IN UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 DUMMY)
+(INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+153 'mmax' '' '' 150 ((VARIABLE IN UNKNOWN-PROC UNKNOWN UNKNOWN 0 0
+DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+)
+
+('dplgnd' 0 2 'gauleg' 0 7 'grph213' 0 14 'grphsub' 0 27 'grtoph' 0 42
+'legtr' 0 43 'lgtr213' 0 50 'maxauf' 0 59 'phgcut' 0 60 'phgpns' 0 74
+'phgr213' 0 88 'phsym' 0 100 'phsymcut' 0 114 'phtogr' 0 128 'plgnfa' 0
+129 'rfouftr' 0 134 'rfourtr' 0 142 'spfilter' 0 149)
Index: preproc/src/makefile
===================================================================
--- preproc/src/makefile	(revision 57637935b8c736ecb0a376df5e8f6a044bbd05af)
+++ preproc/src/makefile	(revision 57637935b8c736ecb0a376df5e8f6a044bbd05af)
@@ -0,0 +1,56 @@
+###############################################################################
+#
+# Top level Makefile for ECMWFDATA software
+#
+# Last modified:  August 20, 2013
+#
+###############################################################################
+
+.SUFFIXES: .o .c .f .f90 .f95 .F 
+
+
+.f90.o:	
+	$(F90C) -c $(F90FLAGS)  $<
+
+
+TARGET_ARCH =
+OPT	= -g -O
+DEBUG	= -g -O
+LIB     = 
+FC=gfortran  -m64  -fdefault-real-8 -fcray-pointer -fno-second-underscore  -ffixed-line-length-132 -fopenmp -fconvert=big-endian  -fmax-stack-var-size=100000000 
+F90C=gfortran   -m64 -fdefault-real-8 -fcray-pointer -fno-second-underscore  -ffixed-line-length-132 -fopenmp  -fconvert=big-endian  -fmax-stack-var-size=100000000 
+GRIB_API_INCLUDE = $(GRIB_API_FFLAGS)
+GRIB_API_LIB = $(GRIB_API_LDFLAGS)
+FFLAGS =  $(OPT) $(DEBUG) -I. $(GRIB_API_INCLUDE)
+F90FLAGS =  $(OPT) $(DEBUG)  -I. $(GRIB_API_INCLUDE)
+LDFLAGS =  $(OPT) $(DEBUG)
+EMOSLIB=$(EMOS_LDFLAGS) 
+LIB =  $(EMOSLIB)  $(GRIB_API_LIB) -lgcc -lm -fdefault-integer-8  -lgfortran -ljasper 
+
+F90=$(F90C)
+
+BINDIR  =      .
+
+EXE	=	CONVERT2
+
+all:	${EXE}
+
+clean:
+	rm *.o *.mod ${EXE} 
+
+phgrreal.o: phgrreal.f90
+	$(F90) -c -g -O3 -fopenmp phgrreal.f90
+
+grphreal.o: grphreal.f90
+	$(F90) -c -g -O3 -fopenmp grphreal.f90
+
+ftrafo.o: ftrafo.f90
+	$(F90) -c -g -O3 -fopenmp ftrafo.f90
+
+CONVERT2:	phgrreal.o grphreal.o ftrafo.o rwGRIB2.o  preconvert.o
+	$(F90) $(DEBUG) $(OPT) -o CONVERT2 ftrafo.o phgrreal.o grphreal.o rwGRIB2.o preconvert.o ${LIB}
+
+#
+# End of the Makefile
+#
+###############################################################################
Index: preproc/src/phgrreal.f90
===================================================================
--- preproc/src/phgrreal.f90	(revision 57637935b8c736ecb0a376df5e8f6a044bbd05af)
+++ preproc/src/phgrreal.f90	(revision 57637935b8c736ecb0a376df5e8f6a044bbd05af)
@@ -0,0 +1,580 @@
+MODULE PHTOGR
+
+  INTEGER, PARAMETER :: MAXAUF=36000
+
+CONTAINS
+
+  SUBROUTINE PHGR213(CXMN,FELD,WSAVE,IFAX,Z,MLAT,MNAUF, &
+    &MAXL,MAXB,MLEVEL)
+
+    !     DIE ROUTINE F]HRT EINE TRANSFORMATION EINER
+    !     FELDVARIABLEN VOM PHASENRAUM IN  DEN PHYSIKALISCHEN
+    !     RAUM AUF DAS REDUZIERTE GAUSS'SCHE GITTER DURCH
+    !
+    !     CXMN   = SPEKTRALKOEFFIZIENTEN IN DER REIHENFOLGE
+    !              CX00,CX01,CX11,CX02,....CXMNAUFMNAUF
+    !     FELD   = FELD DER METEOROLOGISCHEN VARIABLEN
+    !	WSAVE  = Working Array fuer Fouriertransformation
+    !     Z 	 = LEGENDREFUNKTIONSWERTE
+    !
+    !     MNAUF    ANZAHL DER FOURIERKOEFFIZIENTEN
+    !     MAXL     ANZAHL DER FUER DAS GITTER BENUTZTEN LAENGEN
+    !     MAXB     ANZAHL DER FUER DAS GITTER BENOETIGTEN BREITEN
+    !     MLEVEL   ANZAHL DER LEVELS, DIE TRANSFORMIERT WERDEN
+    !
+    IMPLICIT NONE
+
+    !			Anzahl der Gitterpunkte auf jedem Breitenkreis
+    INTEGER MLAT(MAXB/2)
+    INTEGER K,MAXL,MAXB,MLEVEL,MNAUF
+    INTEGER IND(MAXB)
+
+
+    !    FELD DER LEGENDREPOLYNOME FUER EINE BREITE
+    REAL Z(0:((MNAUF+3)*(MNAUF+4))/2,MAXB/2)
+
+    REAL, INTENT(IN) ::  CXMN(0:(MNAUF+1)*(MNAUF+2)-1,MLEVEL)
+    REAL FELD(MAXL,MLEVEL)
+    REAL WSAVE(8*MAXB+15,MAXB/2)
+    INTEGER :: IFAX(10,MAXB)
+
+    IND(1)=0
+    DO  K=2,MAXB/2
+       IND(K)=IND(K-1)+MLAT(K-1)
+    ENDDO
+
+    !$OMP PARALLEL DO SCHEDULE(DYNAMIC)
+    DO  K=1,MAXB/2
+       CALL PHSYM(K,IND,CXMN,FELD,Z,WSAVE,IFAX,MLAT, &
+       &MNAUF,MAXL,MAXB,MLEVEL)
+
+    ENDDO
+    !$OMP END PARALLEL DO
+
+  END SUBROUTINE PHGR213
+  !
+  !
+  SUBROUTINE PHSYM(K,IND,CXMN,FELD,Z,WSAVE,IFAX,MLAT, &
+       &MNAUF,MAXL,MAXB,MLEVEL)
+
+    IMPLICIT NONE
+
+    INTEGER MLAT(MAXB/2)
+    INTEGER K,L,I,J,LLS,LLPS,LL,LLP,MAXL,MAXB,MLEVEL,MNAUF
+    INTEGER IND(MAXB)
+    INTEGER :: IFAX(10,MAXB)
+
+
+    !    FELD DER FOURIERKOEFFIZIENTEN
+    REAL :: CXMS(0:MAXAUF-1),CXMA(0:MAXAUF-1)
+
+    !    FELD DER LEGENDREPOLYNOME FUER EINE BREITE
+    REAL Z(0:((MNAUF+3)*(MNAUF+4))/2,MAXB/2)
+    REAL ACR,ACI,SCR,SCI
+
+    REAL, INTENT(IN) ::  CXMN(0:(MNAUF+1)*(MNAUF+2)-1,MLEVEL)
+    REAL FELD(MAXL,MLEVEL)
+    REAL WSAVE(8*MAXB+15,MAXB/2)
+
+    DO  L=1,MLEVEL
+       LL=0
+       LLP=0
+       DO  I=0,MNAUF
+          SCR=0.D0
+          SCI=0.D0
+          ACR=0.D0
+          ACI=0.D0
+          LLS=LL
+          LLPS=LLP
+          IF(2*I+1.LT.MLAT(K)) THEN
+             !	Innerste Schleife aufgespalten um if-Abfrage zu sparen
+             DO J=I,MNAUF,2
+                SCR=SCR+Z(LLP,K)*CXMN(2*LL,L)
+                SCI=SCI+Z(LLP,K)*CXMN(2*LL+1,L)
+                LL=LL+2            
+                LLP=LLP+2            
+             ENDDO
+             LL=LLS+1
+             LLP=LLPS+1
+             DO  J=I+1,MNAUF,2
+                ACR=ACR+Z(LLP,K)*CXMN(2*LL,L)
+                ACI=ACI+Z(LLP,K)*CXMN(2*LL+1,L)
+                LL=LL+2            
+                LLP=LLP+2            
+             ENDDO
+          ENDIF
+          LL=LLS+(MNAUF-I+1)
+          LLP=LLPS+(MNAUF-I+3)
+          CXMS(2*I)=SCR+ACR
+          CXMS(2*I+1)=SCI+ACI
+          CXMA(2*I)=SCR-ACR
+          CXMA(2*I+1)=SCI-ACI
+       ENDDO
+       CALL RFOURTR(CXMS,WSAVE(:,K),IFAX(:,K),MNAUF,&
+            &MLAT(K))
+       FELD(IND(k)+1:IND(K)+MLAT(K),L)=CXMS(0:MLAT(K)-1)
+       CALL RFOURTR(CXMA,&
+            &WSAVE(:,K),IFAX(:,K),MNAUF,MLAT(K))
+       FELD(MAXL-IND(k)-MLAT(K)+1:MAXL-IND(k),L)=CXMA(0:MLAT(K)-1)
+
+    ENDDO
+
+  END SUBROUTINE PHSYM
+
+  SUBROUTINE PHGCUT(CXMN,FELD,WSAVE,IFAX,Z,&
+       &                  MNAUF,MMAX,MAUF,MANF,MAXL,MAXB,MLEVEL)
+
+    !     DIE ROUTINE FUEHRT EINE TRANSFORMATION EINER
+    !     FELDVARIABLEN VOM PHASENRAUM IN  DEN PHYSIKALISCHEN
+    !     RAUM AUF KUGELKOORDINATEN DURCH. Es kann ein Teilausschnitt
+    !			Der Erde angegeben werden. Diese Routine ist langsamer als
+    !			phgrph
+    !
+    !     CXMN   = SPEKTRALKOEFFIZIENTEN IN DER REIHENFOLGE
+    !              CX00,CX01,CX11,CX02,....CXMNAUFMNAUF
+    !     FELD   = FELD DER METEOROLOGISCHEN VARIABLEN
+    !     Z      = SINUS DER GEOGRAFISCHEN BREITEN
+    !
+    !     MNAUF    ANZAHL DER FOURIERKOEFFIZIENTEN
+    !     MAUF     ANZAHL DER LAENGEN UND DER FOURIERKOEFFIZIENTEN
+    !     MANF     ANFANG DES LAENGENBEREICHS FUER DAS GITTER,
+    !              AUF DAS INTERPOLIERT WERDEN SOLL
+    !     MAXL     ANZAHL DER FUER DAS GITTER BENUTZTEN LAENGEN
+    !     MAXB     ANZAHL DER FUER DAS GITTER BENOETIGTEN BREITEN
+    !     MLEVEL   ANZAHL DER LEVELS, DIE TRANSFORMIERT WERDEN
+    !
+    IMPLICIT NONE
+    INTEGER, INTENT(IN)  :: MNAUF, MMAX, MAUF, MANF, MAXL, MAXB, MLEVEL
+    REAL, INTENT(OUT)    :: FELD(MAXL,MAXB,MLEVEL)
+    INTEGER, INTENT(INOUT) :: IFAX(10)
+
+    !    FELD DER LEGENDREPOLYNOME FUER EINE BREITE
+    REAL, INTENT(IN)     :: Z(0:((MMAX+3)*(MMAX+4))/2,MAXB)
+    REAL, INTENT(IN)     :: CXMN(0:(MMAX+1)*(MMAX+2)-1,MLEVEL)
+    REAL, INTENT(INOUT)  :: WSAVE(4*MAUF+15)  ! work array previously
+                                              ! initialized with set99 
+                                              ! (will be used in fft99)
+    INTEGER              :: J
+    LOGICAL              :: SYM
+
+
+    IF(MAUF.LE.MNAUF) WRITE(*,*) 'TOO COARSE LONGITUDE RESOLUTION'
+    IF((MANF.LT.1).OR.(MAXL.LT.1).OR. &
+         &       (MANF.GT.MAUF).OR.(MAXL.GT.MAUF)) THEN
+       WRITE(*,*) 'WRONG LONGITUDE RANGE',MANF,MAXL
+       STOP
+    ENDIF
+
+    ! Pruefe, ob Ausgabegitter symmetrisch zum Aequator ist
+    ! Wenn ja soll Symmetrie der Legendrepolynome ausgenutzt werden
+    ! Check if the output grid is symmetrical to the equator
+    ! If yes we exploit it
+
+    IF(MAXB .GT. 4) THEN
+       SYM=.TRUE.
+       DO  J=5,5
+          IF(ABS(ABS(Z(100,J))-ABS(Z(100,MAXB+1-J))).GT.1E-11) THEN
+             SYM=.FALSE.
+          ENDIF
+       ENDDO
+       WRITE(*,*) 'Symmetrisch: ',SYM
+    ELSE
+       SYM=.FALSE.
+    ENDIF
+
+
+    IF(SYM) THEN
+       !$OMP PARALLEL DO 
+       DO J=1,(MAXB+1)/2
+          CALL PHSYMCUT(J,CXMN,FELD,Z,WSAVE,IFAX, &
+               &MAUF,MNAUF,MAXL,MAXB,MLEVEL,MANF)
+
+       ENDDO
+       !$OMP END PARALLEL DO
+    ELSE
+       !$OMP PARALLEL DO 
+       DO J=1,MAXB
+          CALL PHGPNS(CXMN,FELD,Z,WSAVE,IFAX, &
+               &J,MNAUF,MAUF,MANF,MAXL,MAXB,MLEVEL)
+       ENDDO
+       !$OMP END PARALLEL DO
+
+    ENDIF
+
+
+    RETURN
+  END SUBROUTINE PHGCUT
+
+  SUBROUTINE PHSYMCUT(J,CXMN,FELD,Z,WSAVE,IFAX,&
+       &MAUF,MNAUF,MAXL,MAXB,MLEVEL,MANF)
+
+    IMPLICIT NONE
+
+    INTEGER, INTENT(IN)     :: J
+    REAL,    INTENT(IN)     :: CXMN(0:(MNAUF+1)*(MNAUF+2)-1,MLEVEL)
+    REAL,    INTENT(OUT)    :: FELD(MAXL,MAXB,MLEVEL)
+    REAL,    INTENT(IN)     :: Z(0:((MNAUF+3)*(MNAUF+4))/2,MAXB)
+    REAL,    INTENT(INOUT)  :: WSAVE(4*MAUF+15)
+    INTEGER, INTENT(IN)     :: IFAX(10)
+    INTEGER, INTENT(IN)     :: MAUF,MNAUF,MAXL,MAXB,MLEVEL,MANF
+    
+    !    FELD DER FOURIERKOEFFIZIENTEN
+
+    REAL :: CXM(0:MAXAUF-1),CXMA(0:MAXAUF-1)
+
+    !    FELD DER LEGENDREPOLYNOME FUER EINE BREITE
+    REAL SCR,SCI,ACR,ACI
+
+
+    INTEGER            :: L, LL, LLP, LLS, LLPS, I, K
+
+    DO L=1,MLEVEL
+       LL=0
+       LLP=0
+       DO  I=0,MNAUF
+          SCR=0.D0
+          SCI=0.D0
+          ACR=0.D0
+          ACI=0.D0
+          LLS=LL
+          LLPS=LLP
+          !	Innerste Schleife aufgespalten um if-Abfrage zu sparen
+          DO  K=I,MNAUF,2
+             SCR=SCR+Z(LLP,J)*CXMN(2*LL,L)
+             SCI=SCI+Z(LLP,J)*CXMN(2*LL+1,L)
+             LL=LL+2            
+             LLP=LLP+2            
+          ENDDO
+          LL=LLS+1
+          LLP=LLPS+1
+          DO  K=I+1,MNAUF,2
+             ACR=ACR+Z(LLP,J)*CXMN(2*LL,L)
+             ACI=ACI +Z(LLP,J)*CXMN(2*LL+1,L)
+             LL=LL+2            
+             LLP=LLP+2            
+          ENDDO
+          LL=LLS+MNAUF-I+1
+          LLP=LLPS+MNAUF-I+3
+          CXM(2*I)=SCR+ACR
+          CXM(2*I+1)=SCI+ACI
+          CXMA(2*I)=SCR-ACR
+          CXMA(2*I+1)=SCI-ACI
+       ENDDO
+
+       CALL RFOURTR(CXM,WSAVE,IFAX,MNAUF,MAUF)
+       DO  I=0,MAXL-1
+          IF(MANF+I.LE.MAUF) THEN
+             FELD(I+1,J,L)=CXM(MANF+I-1)
+          ELSE
+             FELD(I+1,J,L)=CXM(MANF-MAUF+I-1)
+          ENDIF
+       ENDDO
+       CALL RFOURTR(CXMA,WSAVE,IFAX,MNAUF,MAUF)
+       DO  I=0,MAXL-1
+          IF(MANF+I.LE.MAUF) THEN
+             FELD(I+1,MAXB+1-J,L)=CXMA(MANF+I-1)
+          ELSE
+             FELD(I+1,MAXB+1-J,L)=CXMA(MANF-MAUF+I-1)
+          ENDIF
+       ENDDO
+    ENDDO
+
+  END SUBROUTINE PHSYMCUT
+
+  SUBROUTINE PHGPNS(CXMN,FELD,Z,WSAVE,IFAX, &
+       J,MNAUF,MAUF,MANF,MAXL,MAXB,MLEVEL)
+
+    IMPLICIT NONE
+    REAL,    intent(in)    :: CXMN(0:(MNAUF+1)*(MNAUF+2)-1,MLEVEL)
+    REAL,    intent(out)   :: FELD(MAXL,MAXB,MLEVEL)
+    REAL,    intent(in)    :: Z(0:((MNAUF+3)*(MNAUF+4))/2,MAXB)
+    REAL,    intent(inout) :: WSAVE(4*MAUF+15)
+    INTEGER, intent(in)    :: IFAX(10)
+    INTEGER, intent(in)    :: MNAUF,MAUF,MANF,J,MAXL,MAXB,MLEVEL
+
+    REAL :: CXM(0:MAXAUF-1)
+
+    INTEGER I,L
+
+    DO L=1,MLEVEL
+       CALL LEGTR(CXMN(:,L),CXM,Z(:,J),MNAUF,MAUF)
+       CALL RFOURTR(CXM,WSAVE,IFAX,MNAUF,MAUF)
+
+       DO I=0,MAXL-1
+          IF(MANF+I.LE.MAUF) THEN
+             FELD(I+1,J,L)=CXM(MANF+I-1)
+          ELSE
+             FELD(I+1,J,L)=CXM(MANF-MAUF+I-1)
+          ENDIF
+       ENDDO
+    ENDDO
+  END SUBROUTINE PHGPNS
+  !
+  SUBROUTINE LEGTR(CXMN,CXM,Z,MNAUF,MAUF)
+    IMPLICIT NONE
+    INTEGER MNAUF,MAUF,LL,LLP,I,J
+    REAL CXM(0:MAXAUF-1)
+    REAL CXMN(0:(MNAUF+1)*(MNAUF+2)-1)
+    REAL Z(0:((MNAUF+3)*(MNAUF+4))/2)
+    REAL CI,CR
+    !
+    !     DIESE ROUTINE BERECHNET DIE FOURIERKOEFFIZIENTEN CXM
+    !
+    LL=0
+    LLP=0
+    DO  I=0,MNAUF
+       CR=0.D0
+       CI=0.D0
+       DO  J=I,MNAUF
+          CR=CR+Z(LLP)*CXMN(2*LL)
+          CI=CI+Z(LLP)*CXMN(2*LL+1)
+          LL=LL+1
+          LLP=LLP+1
+       ENDDO
+       LLP=LLP+2
+       CXM(2*I)=CR
+       CXM(2*I+1)=CI
+    ENDDO
+
+  END SUBROUTINE LEGTR
+  !
+  !     
+  SUBROUTINE RFOURTR(CXM,TRIGS,IFAX,MNAUF,MAXL)
+    !     BERECHNET DIE FOURIERSUMME MIT EINEM FFT-ALGORITHMUS
+    IMPLICIT NONE
+
+    INTEGER, INTENT(IN) :: MNAUF, MAXL
+    INTEGER,intent(IN)  :: IFAX(10)
+    REAL, intent(inout) :: CXM(0:MAXAUF-1)
+    REAL                :: WSAVE(2*MAXL),TRIGS(2*MAXL)
+
+    INTEGER :: I
+
+    DO I=MNAUF+1,MAXL-1
+       CXM(2*I)=0.0
+       CXM(2*I+1)=0.0
+    ENDDO
+    CALL FFT99(CXM,WSAVE,TRIGS,IFAX,1,1,MAXL,1,1)
+    DO I=0,MAXL-1
+       CXM(I)=CXM(I+1)
+    ENDDO
+
+    RETURN
+  END SUBROUTINE RFOURTR
+  !     
+  !    
+  SUBROUTINE GAULEG(X1,X2,X,W,N)
+  ! From numerical recipes
+  ! Given the lower and upper limits of integration X1 and X2, 
+  ! this routine returns arrayx X and W of length N containing the
+  ! abscissa and weights of the Gauss-Legendre N-point quadrature
+  ! formula. The parameter EPS is the relative precision. Note that
+  ! internal computations are done in double precision.
+    IMPLICIT NONE
+
+    INTEGER, INTENT(IN)             :: N
+    REAL, INTENT(IN)                :: X1, X2
+    REAL, DIMENSION(N), INTENT(OUT) :: X, W
+
+    REAL                            :: PI
+    REAL, PARAMETER                 :: EPS=3.D-14
+    INTEGER                         :: I,J,M 
+    REAL                            :: P1, P2, P3
+    REAL                            :: PP
+    REAL                            :: Z1, Z
+    REAL                            :: XM, XL
+
+    PI=ACOS(-1.D0)
+   
+    M=(N+1)/2
+    XM=0.5D0*(X2+X1)
+    XL=0.5D0*(X2-X1)
+    DO  I=1,M
+       Z=DCOS(3.141592654D0*(I-.25D0)/(N+.5D0))
+       DO 
+          P1=1.D0
+          P2=0.D0
+          DO  J=1,N
+             P3=P2
+             P2=P1
+             P1=((2.D0*J-1.D0)*Z*P2-(J-1.D0)*P3)/J
+          ENDDO
+          PP=N*(Z*P1-P2)/(Z*Z-1.D0)
+          Z1=Z
+          Z=Z1-P1/PP
+          IF (ABS(Z-Z1).LE.EPS) EXIT
+       ENDDO
+
+       X(I)=XM-XL*Z
+       X(N+1-I)=XM+XL*Z
+       W(I)=2.D0*XL/((1.D0-Z*Z)*PP*PP)
+       W(N+1-I)=W(I)
+    ENDDO
+  END SUBROUTINE GAULEG
+  !
+  !
+  SUBROUTINE PLGNFA(LL,X,Z)
+    !
+    ! PLGNFA is associated with normalization of 
+    ! legendre functions OF P00(X) to PLL(X)
+    ! and write result in Z
+    ! The polynomials are indexed as the ECMWF, i.e.
+    ! P00, P10, P11, P20, P21, P22, ... 
+    ! This routine is analogous to PLGNDN
+    ! X is the cosinus of the zenith angle or
+    ! sinus of latitude
+    !
+    IMPLICIT NONE
+
+    INTEGER, INTENT(IN)                                :: LL
+    REAL, INTENT(IN)                                   :: X
+    REAL, DIMENSION (0:((LL+3)*(LL+4))/2), INTENT(OUT) :: Z
+
+    REAL                 :: FACT, POT, SOMX2
+    REAL                 :: DJ, DK, DDK
+    INTEGER              :: I, J, K, L 
+
+    !
+    L=LL+2
+    I=1
+    Z(0)=1.D0
+    FACT=1.D0
+    POT=1.D0
+    SOMX2=DSQRT(1.D0-X*X)
+    DO  J=0,L
+       DJ=DBLE(J)
+       IF(J.GT.0) THEN
+          FACT=FACT*(2.D0*DJ-1.D0)/(2.D0*DJ)
+          POT=POT*SOMX2
+          Z(I)=DSQRT((2.D0*DJ+1.D0)*FACT)*POT
+          I=I+1
+       ENDIF
+       IF(J.LT.L) THEN
+          Z(I)=X* &
+               &DSQRT((4.D0*DJ*DJ+8.D0*DJ+3.D0)/(2.D0*DJ+1.D0))*Z(I-1)
+          I=I+1
+       ENDIF
+       DK=DJ+2.D0
+       DO  K=J+2,L
+          DDK=(DK*DK-DJ*DJ)
+          Z(I)=X*DSQRT((4.D0*DK*DK-1.D0)/DDK)*Z(I-1)-       &
+               &    DSQRT(((2.D0*DK+1.D0)*(DK-DJ-1.D0)*(DK+DJ-1.D0))/ &
+               &    ((2.D0*DK-3.D0)*DDK))*Z(I-2)
+          DK=DK+1.D0
+          I=I+1
+       ENDDO
+    ENDDO
+    RETURN
+  END SUBROUTINE PLGNFA
+
+
+  SUBROUTINE DPLGND(MNAUF,Z,DZ)
+    !
+    ! DPLGND BERECHNET DIE ABLEITUNG DER NORMIERTEN ASSOZIIERTEN
+    ! LEGENDREFUNKTIONEN VON P00(X) BIS PLL(X)
+    ! UND SCHREIBT SIE IN DAS FELD DZ
+    ! DIE REIHENFOLGE IST
+    ! P00(X),P01(X),P11(X),P02(X),P12(X),P22(X),..PLL(X)
+    !
+    IMPLICIT NONE
+    INTEGER, INTENT(IN) :: MNAUF
+    REAL Z(0:((MNAUF+3)*(MNAUF+4))/2)
+    REAL DZ(0:((MNAUF+2)*(MNAUF+3))/2)
+
+    INTEGER   :: I, J, LLP, LLH
+    REAL      :: WURZELA, WURZELB
+    !
+    IF(Z(0).NE.1.D0) THEN
+       WRITE(*,*) 'DPLGND: Z(0) must be 1.0'
+       STOP
+    ENDIF
+
+    LLP=0
+    LLH=0
+    DO  I=0,MNAUF+1
+       DO  J=I,MNAUF+1
+          IF(I.EQ.J) THEN
+             WURZELA=DSQRT(DBLE((J+1)*(J+1)-I*I)/DBLE(4*(J+1)*(J+1)-1))
+             DZ(LLH)=DBLE(J)*WURZELA*Z(LLP+1)
+          ELSE
+             WURZELB=DSQRT(DBLE((J+1)*(J+1)-I*I)/DBLE(4*(J+1)*(J+1)-1))
+             DZ(LLH)=DBLE(J)*WURZELB*Z(LLP+1)-DBLE(J+1)*WURZELA*Z(LLP-1)
+             WURZELA=WURZELB
+          ENDIF
+          LLH=LLH+1              
+          LLP=LLP+1
+       ENDDO
+       LLP=LLP+1
+    ENDDO
+  END SUBROUTINE DPLGND
+
+
+  ! Spectral Filter of Sardeshmukh and Hoskins (1984, MWR)
+  ! MM=Spectral truncation of field
+  ! MMAX= Spectral truncation of filter
+  !
+  SUBROUTINE SPFILTER(FELDMN,MM,MMAX)
+
+    IMPLICIT NONE
+
+    INTEGER, INTENT(IN) :: MM,MMAX
+    REAL, INTENT(INOUT) :: FELDMN(0:(MM+1)*(MM+2)-1)
+! local variables
+    INTEGER             :: I,J,K,L
+    REAL                :: KMAX,SMAX,FAK
+
+    SMAX=0.1
+    KMAX=-ALOG(SMAX)
+    KMAX=KMAX/(float(MMAX)*float(MMAX+1))**2
+    l=0
+    do i=0,MM
+       do j=i,MM
+          if(j .le. MMAX) then
+             fak=1.0
+             feldmn(2*l)=feldmn(2*l)*fak
+             feldmn(2*l+1)=feldmn(2*l+1)*fak
+          else
+             feldmn(2*l)=0.
+             feldmn(2*l+1)=0.
+          endif
+          l=l+1
+       enddo
+    enddo
+  END SUBROUTINE SPFILTER
+
+END MODULE PHTOGR
+    
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Index: preproc/src/phtogr.mod
===================================================================
--- preproc/src/phtogr.mod	(revision 57637935b8c736ecb0a376df5e8f6a044bbd05af)
+++ preproc/src/phtogr.mod	(revision 57637935b8c736ecb0a376df5e8f6a044bbd05af)
@@ -0,0 +1,459 @@
+GFORTRAN module version '10' created from phgrreal.f90
+MD5:ad9da62e73ea0e16f9f2ab3d469cea29 -- If you edit this, you'll get what you deserve.
+
+(() () () () () () () () () () () () () () () () () () () () () () () ()
+() () ())
+
+()
+
+()
+
+()
+
+()
+
+()
+
+(2 'dplgnd' 'phtogr' '' 1 ((PROCEDURE UNKNOWN-INTENT MODULE-PROC DECL
+UNKNOWN 0 0 SUBROUTINE) (UNKNOWN 0 0 0 0 UNKNOWN ()) 3 0 (4 5 6) () 0 ()
+() () 0 0)
+7 'gauleg' 'phtogr' '' 1 ((PROCEDURE UNKNOWN-INTENT MODULE-PROC DECL
+UNKNOWN 0 0 SUBROUTINE IMPLICIT_PURE) (UNKNOWN 0 0 0 0 UNKNOWN ()) 8 0 (
+9 10 11 12 13) () 0 () () () 0 0)
+14 'legtr' 'phtogr' '' 1 ((PROCEDURE UNKNOWN-INTENT MODULE-PROC DECL
+UNKNOWN 0 0 SUBROUTINE) (UNKNOWN 0 0 0 0 UNKNOWN ()) 15 0 (16 17 18 19
+20) () 0 () () () 0 0)
+21 'maxauf' 'phtogr' '' 1 ((PARAMETER UNKNOWN-INTENT UNKNOWN-PROC
+UNKNOWN IMPLICIT-SAVE 0 0) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () (
+CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '36000') () 0 () () () 0 0)
+22 'phgcut' 'phtogr' '' 1 ((PROCEDURE UNKNOWN-INTENT MODULE-PROC DECL
+UNKNOWN 0 0 SUBROUTINE) (UNKNOWN 0 0 0 0 UNKNOWN ()) 23 0 (24 25 26 27
+28 29 30 31 32 33 34 35) () 0 () () () 0 0)
+36 'phgpns' 'phtogr' '' 1 ((PROCEDURE UNKNOWN-INTENT MODULE-PROC DECL
+UNKNOWN 0 0 SUBROUTINE) (UNKNOWN 0 0 0 0 UNKNOWN ()) 37 0 (38 39 40 41
+42 43 44 45 46 47 48 49) () 0 () () () 0 0)
+50 'phgr213' 'phtogr' '' 1 ((PROCEDURE UNKNOWN-INTENT MODULE-PROC DECL
+UNKNOWN 0 0 SUBROUTINE) (UNKNOWN 0 0 0 0 UNKNOWN ()) 51 0 (52 53 54 55
+56 57 58 59 60 61) () 0 () () () 0 0)
+62 'phsym' 'phtogr' '' 1 ((PROCEDURE UNKNOWN-INTENT MODULE-PROC DECL
+UNKNOWN 0 0 SUBROUTINE) (UNKNOWN 0 0 0 0 UNKNOWN ()) 63 0 (64 65 66 67
+68 69 70 71 72 73 74 75) () 0 () () () 0 0)
+76 'phsymcut' 'phtogr' '' 1 ((PROCEDURE UNKNOWN-INTENT MODULE-PROC DECL
+UNKNOWN 0 0 SUBROUTINE) (UNKNOWN 0 0 0 0 UNKNOWN ()) 77 0 (78 79 80 81
+82 83 84 85 86 87 88 89) () 0 () () () 0 0)
+90 'phtogr' 'phtogr' '' 1 ((MODULE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0) (UNKNOWN 0 0 0 0 UNKNOWN ()) 0 0 () () 0 () () () 0 0)
+91 'plgnfa' 'phtogr' '' 1 ((PROCEDURE UNKNOWN-INTENT MODULE-PROC DECL
+UNKNOWN 0 0 SUBROUTINE IMPLICIT_PURE) (UNKNOWN 0 0 0 0 UNKNOWN ()) 92 0
+(93 94 95) () 0 () () () 0 0)
+96 'rfourtr' 'phtogr' '' 1 ((PROCEDURE UNKNOWN-INTENT MODULE-PROC DECL
+UNKNOWN 0 0 SUBROUTINE) (UNKNOWN 0 0 0 0 UNKNOWN ()) 97 0 (98 99 100 101
+102) () 0 () () () 0 0)
+103 'spfilter' 'phtogr' '' 1 ((PROCEDURE UNKNOWN-INTENT MODULE-PROC DECL
+UNKNOWN 0 0 SUBROUTINE IMPLICIT_PURE) (UNKNOWN 0 0 0 0 UNKNOWN ()) 104 0
+(105 106 107) () 0 () () () 0 0)
+4 'mnauf' '' '' 3 ((VARIABLE IN UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 DUMMY)
+(INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+5 'z' '' '' 3 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN 0 0
+DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (1 0 EXPLICIT (CONSTANT (
+INTEGER 4 0 0 0 INTEGER ()) 0 '0') (OP (INTEGER 4 0 0 0 INTEGER ()) 0
+DIVIDE (OP (INTEGER 4 0 0 0 INTEGER ()) 0 PARENTHESES (OP (INTEGER 4 0 0
+0 INTEGER ()) 0 TIMES (OP (INTEGER 4 0 0 0 INTEGER ()) 0 PARENTHESES (
+OP (INTEGER 4 0 0 0 INTEGER ()) 0 PLUS (VARIABLE (INTEGER 4 0 0 0
+INTEGER ()) 0 4 ()) (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '3'))) (OP
+(INTEGER 4 0 0 0 INTEGER ()) 0 PARENTHESES (OP (INTEGER 4 0 0 0 INTEGER
+()) 0 PLUS (VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 4 ()) (CONSTANT (
+INTEGER 4 0 0 0 INTEGER ()) 0 '4'))))) (CONSTANT (INTEGER 4 0 0 0
+INTEGER ()) 0 '2'))) 0 () () () 0 0)
+6 'dz' '' '' 3 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN 0
+0 DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (1 0 EXPLICIT (
+CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '0') (OP (INTEGER 4 0 0 0
+INTEGER ()) 0 DIVIDE (OP (INTEGER 4 0 0 0 INTEGER ()) 0 PARENTHESES (OP
+(INTEGER 4 0 0 0 INTEGER ()) 0 TIMES (OP (INTEGER 4 0 0 0 INTEGER ()) 0
+PARENTHESES (OP (INTEGER 4 0 0 0 INTEGER ()) 0 PLUS (VARIABLE (INTEGER 4
+0 0 0 INTEGER ()) 0 4 ()) (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '2')))
+(OP (INTEGER 4 0 0 0 INTEGER ()) 0 PARENTHESES (OP (INTEGER 4 0 0 0
+INTEGER ()) 0 PLUS (VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 4 ()) (
+CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '3'))))) (CONSTANT (INTEGER 4 0
+0 0 INTEGER ()) 0 '2'))) 0 () () () 0 0)
+9 'x1' '' '' 8 ((VARIABLE IN UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 DUMMY) (
+REAL 8 0 0 0 REAL ()) 0 0 () () 0 () () () 0 0)
+10 'x2' '' '' 8 ((VARIABLE IN UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 DUMMY) (
+REAL 8 0 0 0 REAL ()) 0 0 () () 0 () () () 0 0)
+11 'x' '' '' 8 ((VARIABLE OUT UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 DIMENSION
+DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (1 0 EXPLICIT (CONSTANT (INTEGER 4
+0 0 0 INTEGER ()) 0 '1') (VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 13 ()))
+0 () () () 0 0)
+12 'w' '' '' 8 ((VARIABLE OUT UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 DIMENSION
+DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (1 0 EXPLICIT (CONSTANT (INTEGER 4
+0 0 0 INTEGER ()) 0 '1') (VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 13 ()))
+0 () () () 0 0)
+13 'n' '' '' 8 ((VARIABLE IN UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 DUMMY) (
+INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+16 'cxmn' '' '' 15 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0 DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (1 0 EXPLICIT
+(CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '0') (OP (INTEGER 4 0 0 0
+INTEGER ()) 0 MINUS (OP (INTEGER 4 0 0 0 INTEGER ()) 0 TIMES (OP (
+INTEGER 4 0 0 0 INTEGER ()) 0 PARENTHESES (OP (INTEGER 4 0 0 0 INTEGER ())
+0 PLUS (VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 19 ()) (CONSTANT (
+INTEGER 4 0 0 0 INTEGER ()) 0 '1'))) (OP (INTEGER 4 0 0 0 INTEGER ()) 0
+PARENTHESES (OP (INTEGER 4 0 0 0 INTEGER ()) 0 PLUS (VARIABLE (INTEGER 4
+0 0 0 INTEGER ()) 0 19 ()) (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '2'))))
+(CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1'))) 0 () () () 0 0)
+17 'cxm' '' '' 15 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN
+0 0 DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (1 0 EXPLICIT (
+CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '0') (CONSTANT (INTEGER 4 0 0 0
+INTEGER ()) 0 '35999')) 0 () () () 0 0)
+18 'z' '' '' 15 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN 0
+0 DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (1 0 EXPLICIT (
+CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '0') (OP (INTEGER 4 0 0 0
+INTEGER ()) 0 DIVIDE (OP (INTEGER 4 0 0 0 INTEGER ()) 0 PARENTHESES (OP
+(INTEGER 4 0 0 0 INTEGER ()) 0 TIMES (OP (INTEGER 4 0 0 0 INTEGER ()) 0
+PARENTHESES (OP (INTEGER 4 0 0 0 INTEGER ()) 0 PLUS (VARIABLE (INTEGER 4
+0 0 0 INTEGER ()) 0 19 ()) (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '3')))
+(OP (INTEGER 4 0 0 0 INTEGER ()) 0 PARENTHESES (OP (INTEGER 4 0 0 0
+INTEGER ()) 0 PLUS (VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 19 ()) (
+CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '4'))))) (CONSTANT (INTEGER 4 0
+0 0 INTEGER ()) 0 '2'))) 0 () () () 0 0)
+19 'mnauf' '' '' 15 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0 DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+20 'mauf' '' '' 15 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0 DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+24 'cxmn' '' '' 23 ((VARIABLE IN UNKNOWN-PROC UNKNOWN UNKNOWN 0 0
+DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (2 0 EXPLICIT (CONSTANT (
+INTEGER 4 0 0 0 INTEGER ()) 0 '0') (OP (INTEGER 4 0 0 0 INTEGER ()) 0
+MINUS (OP (INTEGER 4 0 0 0 INTEGER ()) 0 TIMES (OP (INTEGER 4 0 0 0
+INTEGER ()) 0 PARENTHESES (OP (INTEGER 4 0 0 0 INTEGER ()) 0 PLUS (
+VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 30 ()) (CONSTANT (INTEGER 4 0 0
+0 INTEGER ()) 0 '1'))) (OP (INTEGER 4 0 0 0 INTEGER ()) 0 PARENTHESES (
+OP (INTEGER 4 0 0 0 INTEGER ()) 0 PLUS (VARIABLE (INTEGER 4 0 0 0
+INTEGER ()) 0 30 ()) (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '2')))) (
+CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1')) (CONSTANT (INTEGER 4 0 0 0
+INTEGER ()) 0 '1') (VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 35 ())) 0 ()
+() () 0 0)
+25 'feld' '' '' 23 ((VARIABLE OUT UNKNOWN-PROC UNKNOWN UNKNOWN 0 0
+DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (3 0 EXPLICIT (CONSTANT (
+INTEGER 4 0 0 0 INTEGER ()) 0 '1') (VARIABLE (INTEGER 4 0 0 0 INTEGER ())
+0 33 ()) (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (VARIABLE (
+INTEGER 4 0 0 0 INTEGER ()) 0 34 ()) (CONSTANT (INTEGER 4 0 0 0 INTEGER
+()) 0 '1') (VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 35 ())) 0 () () () 0
+0)
+26 'wsave' '' '' 23 ((VARIABLE INOUT UNKNOWN-PROC UNKNOWN UNKNOWN 0 0
+DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (1 0 EXPLICIT (CONSTANT (
+INTEGER 4 0 0 0 INTEGER ()) 0 '1') (OP (INTEGER 4 0 0 0 INTEGER ()) 0
+PLUS (OP (INTEGER 4 0 0 0 INTEGER ()) 0 TIMES (CONSTANT (INTEGER 4 0 0 0
+INTEGER ()) 0 '4') (VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 31 ())) (
+CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '15'))) 0 () () () 0 0)
+27 'ifax' '' '' 23 ((VARIABLE INOUT UNKNOWN-PROC UNKNOWN UNKNOWN 0 0
+DIMENSION DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () (1 0 EXPLICIT (
+CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (CONSTANT (INTEGER 4 0 0 0
+INTEGER ()) 0 '10')) 0 () () () 0 0)
+28 'z' '' '' 23 ((VARIABLE IN UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 DIMENSION
+DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (2 0 EXPLICIT (CONSTANT (INTEGER 4
+0 0 0 INTEGER ()) 0 '0') (OP (INTEGER 4 0 0 0 INTEGER ()) 0 DIVIDE (OP (
+INTEGER 4 0 0 0 INTEGER ()) 0 PARENTHESES (OP (INTEGER 4 0 0 0 INTEGER ())
+0 TIMES (OP (INTEGER 4 0 0 0 INTEGER ()) 0 PARENTHESES (OP (INTEGER 4 0
+0 0 INTEGER ()) 0 PLUS (VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 30 ()) (
+CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '3'))) (OP (INTEGER 4 0 0 0
+INTEGER ()) 0 PARENTHESES (OP (INTEGER 4 0 0 0 INTEGER ()) 0 PLUS (
+VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 30 ()) (CONSTANT (INTEGER 4 0 0
+0 INTEGER ()) 0 '4'))))) (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '2'))
+(CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (VARIABLE (INTEGER 4 0 0 0
+INTEGER ()) 0 34 ())) 0 () () () 0 0)
+29 'mnauf' '' '' 23 ((VARIABLE IN UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 DUMMY)
+(INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+30 'mmax' '' '' 23 ((VARIABLE IN UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 DUMMY)
+(INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+31 'mauf' '' '' 23 ((VARIABLE IN UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 DUMMY)
+(INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+32 'manf' '' '' 23 ((VARIABLE IN UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 DUMMY)
+(INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+33 'maxl' '' '' 23 ((VARIABLE IN UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 DUMMY)
+(INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+34 'maxb' '' '' 23 ((VARIABLE IN UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 DUMMY)
+(INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+35 'mlevel' '' '' 23 ((VARIABLE IN UNKNOWN-PROC UNKNOWN UNKNOWN 0 0
+DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+38 'cxmn' '' '' 37 ((VARIABLE IN UNKNOWN-PROC UNKNOWN UNKNOWN 0 0
+DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (2 0 EXPLICIT (CONSTANT (
+INTEGER 4 0 0 0 INTEGER ()) 0 '0') (OP (INTEGER 4 0 0 0 INTEGER ()) 0
+MINUS (OP (INTEGER 4 0 0 0 INTEGER ()) 0 TIMES (OP (INTEGER 4 0 0 0
+INTEGER ()) 0 PARENTHESES (OP (INTEGER 4 0 0 0 INTEGER ()) 0 PLUS (
+VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 44 ()) (CONSTANT (INTEGER 4 0 0
+0 INTEGER ()) 0 '1'))) (OP (INTEGER 4 0 0 0 INTEGER ()) 0 PARENTHESES (
+OP (INTEGER 4 0 0 0 INTEGER ()) 0 PLUS (VARIABLE (INTEGER 4 0 0 0
+INTEGER ()) 0 44 ()) (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '2')))) (
+CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1')) (CONSTANT (INTEGER 4 0 0 0
+INTEGER ()) 0 '1') (VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 49 ())) 0 ()
+() () 0 0)
+39 'feld' '' '' 37 ((VARIABLE OUT UNKNOWN-PROC UNKNOWN UNKNOWN 0 0
+DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (3 0 EXPLICIT (CONSTANT (
+INTEGER 4 0 0 0 INTEGER ()) 0 '1') (VARIABLE (INTEGER 4 0 0 0 INTEGER ())
+0 47 ()) (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (VARIABLE (
+INTEGER 4 0 0 0 INTEGER ()) 0 48 ()) (CONSTANT (INTEGER 4 0 0 0 INTEGER
+()) 0 '1') (VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 49 ())) 0 () () () 0
+0)
+40 'z' '' '' 37 ((VARIABLE IN UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 DIMENSION
+DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (2 0 EXPLICIT (CONSTANT (INTEGER 4
+0 0 0 INTEGER ()) 0 '0') (OP (INTEGER 4 0 0 0 INTEGER ()) 0 DIVIDE (OP (
+INTEGER 4 0 0 0 INTEGER ()) 0 PARENTHESES (OP (INTEGER 4 0 0 0 INTEGER ())
+0 TIMES (OP (INTEGER 4 0 0 0 INTEGER ()) 0 PARENTHESES (OP (INTEGER 4 0
+0 0 INTEGER ()) 0 PLUS (VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 44 ()) (
+CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '3'))) (OP (INTEGER 4 0 0 0
+INTEGER ()) 0 PARENTHESES (OP (INTEGER 4 0 0 0 INTEGER ()) 0 PLUS (
+VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 44 ()) (CONSTANT (INTEGER 4 0 0
+0 INTEGER ()) 0 '4'))))) (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '2'))
+(CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (VARIABLE (INTEGER 4 0 0 0
+INTEGER ()) 0 48 ())) 0 () () () 0 0)
+41 'wsave' '' '' 37 ((VARIABLE INOUT UNKNOWN-PROC UNKNOWN UNKNOWN 0 0
+DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (1 0 EXPLICIT (CONSTANT (
+INTEGER 4 0 0 0 INTEGER ()) 0 '1') (OP (INTEGER 4 0 0 0 INTEGER ()) 0
+PLUS (OP (INTEGER 4 0 0 0 INTEGER ()) 0 TIMES (CONSTANT (INTEGER 4 0 0 0
+INTEGER ()) 0 '4') (VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 45 ())) (
+CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '15'))) 0 () () () 0 0)
+42 'ifax' '' '' 37 ((VARIABLE IN UNKNOWN-PROC UNKNOWN UNKNOWN 0 0
+DIMENSION DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () (1 0 EXPLICIT (
+CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (CONSTANT (INTEGER 4 0 0 0
+INTEGER ()) 0 '10')) 0 () () () 0 0)
+43 'j' '' '' 37 ((VARIABLE IN UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 DUMMY) (
+INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+44 'mnauf' '' '' 37 ((VARIABLE IN UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 DUMMY)
+(INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+45 'mauf' '' '' 37 ((VARIABLE IN UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 DUMMY)
+(INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+46 'manf' '' '' 37 ((VARIABLE IN UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 DUMMY)
+(INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+47 'maxl' '' '' 37 ((VARIABLE IN UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 DUMMY)
+(INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+48 'maxb' '' '' 37 ((VARIABLE IN UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 DUMMY)
+(INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+49 'mlevel' '' '' 37 ((VARIABLE IN UNKNOWN-PROC UNKNOWN UNKNOWN 0 0
+DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+52 'cxmn' '' '' 51 ((VARIABLE IN UNKNOWN-PROC UNKNOWN UNKNOWN 0 0
+DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (2 0 EXPLICIT (CONSTANT (
+INTEGER 4 0 0 0 INTEGER ()) 0 '0') (OP (INTEGER 4 0 0 0 INTEGER ()) 0
+MINUS (OP (INTEGER 4 0 0 0 INTEGER ()) 0 TIMES (OP (INTEGER 4 0 0 0
+INTEGER ()) 0 PARENTHESES (OP (INTEGER 4 0 0 0 INTEGER ()) 0 PLUS (
+VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 58 ()) (CONSTANT (INTEGER 4 0 0
+0 INTEGER ()) 0 '1'))) (OP (INTEGER 4 0 0 0 INTEGER ()) 0 PARENTHESES (
+OP (INTEGER 4 0 0 0 INTEGER ()) 0 PLUS (VARIABLE (INTEGER 4 0 0 0
+INTEGER ()) 0 58 ()) (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '2')))) (
+CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1')) (CONSTANT (INTEGER 4 0 0 0
+INTEGER ()) 0 '1') (VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 61 ())) 0 ()
+() () 0 0)
+53 'feld' '' '' 51 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0 DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (2 0 EXPLICIT
+(CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (VARIABLE (INTEGER 4 0 0 0
+INTEGER ()) 0 59 ()) (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (
+VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 61 ())) 0 () () () 0 0)
+54 'wsave' '' '' 51 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0 DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (2 0 EXPLICIT
+(CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (OP (INTEGER 4 0 0 0
+INTEGER ()) 0 PLUS (OP (INTEGER 4 0 0 0 INTEGER ()) 0 TIMES (CONSTANT (
+INTEGER 4 0 0 0 INTEGER ()) 0 '8') (VARIABLE (INTEGER 4 0 0 0 INTEGER ())
+0 60 ())) (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '15')) (CONSTANT (
+INTEGER 4 0 0 0 INTEGER ()) 0 '1') (OP (INTEGER 4 0 0 0 INTEGER ()) 0
+DIVIDE (VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 60 ()) (CONSTANT (
+INTEGER 4 0 0 0 INTEGER ()) 0 '2'))) 0 () () () 0 0)
+55 'ifax' '' '' 51 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0 DIMENSION DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () (2 0
+EXPLICIT (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (CONSTANT (
+INTEGER 4 0 0 0 INTEGER ()) 0 '10') (CONSTANT (INTEGER 4 0 0 0 INTEGER ())
+0 '1') (VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 60 ())) 0 () () () 0 0)
+56 'z' '' '' 51 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN 0
+0 DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (2 0 EXPLICIT (
+CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '0') (OP (INTEGER 4 0 0 0
+INTEGER ()) 0 DIVIDE (OP (INTEGER 4 0 0 0 INTEGER ()) 0 PARENTHESES (OP
+(INTEGER 4 0 0 0 INTEGER ()) 0 TIMES (OP (INTEGER 4 0 0 0 INTEGER ()) 0
+PARENTHESES (OP (INTEGER 4 0 0 0 INTEGER ()) 0 PLUS (VARIABLE (INTEGER 4
+0 0 0 INTEGER ()) 0 58 ()) (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '3')))
+(OP (INTEGER 4 0 0 0 INTEGER ()) 0 PARENTHESES (OP (INTEGER 4 0 0 0
+INTEGER ()) 0 PLUS (VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 58 ()) (
+CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '4'))))) (CONSTANT (INTEGER 4 0
+0 0 INTEGER ()) 0 '2')) (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (
+OP (INTEGER 4 0 0 0 INTEGER ()) 0 DIVIDE (VARIABLE (INTEGER 4 0 0 0
+INTEGER ()) 0 60 ()) (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '2'))) 0 ()
+() () 0 0)
+57 'mlat' '' '' 51 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0 DIMENSION DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () (1 0
+EXPLICIT (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (OP (INTEGER 4 0
+0 0 INTEGER ()) 0 DIVIDE (VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 60 ())
+(CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '2'))) 0 () () () 0 0)
+58 'mnauf' '' '' 51 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0 DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+59 'maxl' '' '' 51 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0 DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+60 'maxb' '' '' 51 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0 DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+61 'mlevel' '' '' 51 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0 DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+64 'k' '' '' 63 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN 0
+0 DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+65 'ind' '' '' 63 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN
+0 0 DIMENSION DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () (1 0 EXPLICIT (
+CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (VARIABLE (INTEGER 4 0 0 0
+INTEGER ()) 0 74 ())) 0 () () () 0 0)
+66 'cxmn' '' '' 63 ((VARIABLE IN UNKNOWN-PROC UNKNOWN UNKNOWN 0 0
+DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (2 0 EXPLICIT (CONSTANT (
+INTEGER 4 0 0 0 INTEGER ()) 0 '0') (OP (INTEGER 4 0 0 0 INTEGER ()) 0
+MINUS (OP (INTEGER 4 0 0 0 INTEGER ()) 0 TIMES (OP (INTEGER 4 0 0 0
+INTEGER ()) 0 PARENTHESES (OP (INTEGER 4 0 0 0 INTEGER ()) 0 PLUS (
+VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 72 ()) (CONSTANT (INTEGER 4 0 0
+0 INTEGER ()) 0 '1'))) (OP (INTEGER 4 0 0 0 INTEGER ()) 0 PARENTHESES (
+OP (INTEGER 4 0 0 0 INTEGER ()) 0 PLUS (VARIABLE (INTEGER 4 0 0 0
+INTEGER ()) 0 72 ()) (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '2')))) (
+CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1')) (CONSTANT (INTEGER 4 0 0 0
+INTEGER ()) 0 '1') (VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 75 ())) 0 ()
+() () 0 0)
+67 'feld' '' '' 63 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0 DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (2 0 EXPLICIT
+(CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (VARIABLE (INTEGER 4 0 0 0
+INTEGER ()) 0 73 ()) (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (
+VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 75 ())) 0 () () () 0 0)
+68 'z' '' '' 63 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN 0
+0 DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (2 0 EXPLICIT (
+CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '0') (OP (INTEGER 4 0 0 0
+INTEGER ()) 0 DIVIDE (OP (INTEGER 4 0 0 0 INTEGER ()) 0 PARENTHESES (OP
+(INTEGER 4 0 0 0 INTEGER ()) 0 TIMES (OP (INTEGER 4 0 0 0 INTEGER ()) 0
+PARENTHESES (OP (INTEGER 4 0 0 0 INTEGER ()) 0 PLUS (VARIABLE (INTEGER 4
+0 0 0 INTEGER ()) 0 72 ()) (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '3')))
+(OP (INTEGER 4 0 0 0 INTEGER ()) 0 PARENTHESES (OP (INTEGER 4 0 0 0
+INTEGER ()) 0 PLUS (VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 72 ()) (
+CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '4'))))) (CONSTANT (INTEGER 4 0
+0 0 INTEGER ()) 0 '2')) (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (
+OP (INTEGER 4 0 0 0 INTEGER ()) 0 DIVIDE (VARIABLE (INTEGER 4 0 0 0
+INTEGER ()) 0 74 ()) (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '2'))) 0 ()
+() () 0 0)
+69 'wsave' '' '' 63 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0 DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (2 0 EXPLICIT
+(CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (OP (INTEGER 4 0 0 0
+INTEGER ()) 0 PLUS (OP (INTEGER 4 0 0 0 INTEGER ()) 0 TIMES (CONSTANT (
+INTEGER 4 0 0 0 INTEGER ()) 0 '8') (VARIABLE (INTEGER 4 0 0 0 INTEGER ())
+0 74 ())) (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '15')) (CONSTANT (
+INTEGER 4 0 0 0 INTEGER ()) 0 '1') (OP (INTEGER 4 0 0 0 INTEGER ()) 0
+DIVIDE (VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 74 ()) (CONSTANT (
+INTEGER 4 0 0 0 INTEGER ()) 0 '2'))) 0 () () () 0 0)
+70 'ifax' '' '' 63 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0 DIMENSION DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () (2 0
+EXPLICIT (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (CONSTANT (
+INTEGER 4 0 0 0 INTEGER ()) 0 '10') (CONSTANT (INTEGER 4 0 0 0 INTEGER ())
+0 '1') (VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 74 ())) 0 () () () 0 0)
+71 'mlat' '' '' 63 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0 DIMENSION DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () (1 0
+EXPLICIT (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (OP (INTEGER 4 0
+0 0 INTEGER ()) 0 DIVIDE (VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 74 ())
+(CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '2'))) 0 () () () 0 0)
+72 'mnauf' '' '' 63 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0 DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+73 'maxl' '' '' 63 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0 DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+74 'maxb' '' '' 63 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0 DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+75 'mlevel' '' '' 63 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0 DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+78 'j' '' '' 77 ((VARIABLE IN UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 DUMMY) (
+INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+79 'cxmn' '' '' 77 ((VARIABLE IN UNKNOWN-PROC UNKNOWN UNKNOWN 0 0
+DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (2 0 EXPLICIT (CONSTANT (
+INTEGER 4 0 0 0 INTEGER ()) 0 '0') (OP (INTEGER 4 0 0 0 INTEGER ()) 0
+MINUS (OP (INTEGER 4 0 0 0 INTEGER ()) 0 TIMES (OP (INTEGER 4 0 0 0
+INTEGER ()) 0 PARENTHESES (OP (INTEGER 4 0 0 0 INTEGER ()) 0 PLUS (
+VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 85 ()) (CONSTANT (INTEGER 4 0 0
+0 INTEGER ()) 0 '1'))) (OP (INTEGER 4 0 0 0 INTEGER ()) 0 PARENTHESES (
+OP (INTEGER 4 0 0 0 INTEGER ()) 0 PLUS (VARIABLE (INTEGER 4 0 0 0
+INTEGER ()) 0 85 ()) (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '2')))) (
+CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1')) (CONSTANT (INTEGER 4 0 0 0
+INTEGER ()) 0 '1') (VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 88 ())) 0 ()
+() () 0 0)
+80 'feld' '' '' 77 ((VARIABLE OUT UNKNOWN-PROC UNKNOWN UNKNOWN 0 0
+DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (3 0 EXPLICIT (CONSTANT (
+INTEGER 4 0 0 0 INTEGER ()) 0 '1') (VARIABLE (INTEGER 4 0 0 0 INTEGER ())
+0 86 ()) (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (VARIABLE (
+INTEGER 4 0 0 0 INTEGER ()) 0 87 ()) (CONSTANT (INTEGER 4 0 0 0 INTEGER
+()) 0 '1') (VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 88 ())) 0 () () () 0
+0)
+81 'z' '' '' 77 ((VARIABLE IN UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 DIMENSION
+DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (2 0 EXPLICIT (CONSTANT (INTEGER 4
+0 0 0 INTEGER ()) 0 '0') (OP (INTEGER 4 0 0 0 INTEGER ()) 0 DIVIDE (OP (
+INTEGER 4 0 0 0 INTEGER ()) 0 PARENTHESES (OP (INTEGER 4 0 0 0 INTEGER ())
+0 TIMES (OP (INTEGER 4 0 0 0 INTEGER ()) 0 PARENTHESES (OP (INTEGER 4 0
+0 0 INTEGER ()) 0 PLUS (VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 85 ()) (
+CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '3'))) (OP (INTEGER 4 0 0 0
+INTEGER ()) 0 PARENTHESES (OP (INTEGER 4 0 0 0 INTEGER ()) 0 PLUS (
+VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 85 ()) (CONSTANT (INTEGER 4 0 0
+0 INTEGER ()) 0 '4'))))) (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '2'))
+(CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (VARIABLE (INTEGER 4 0 0 0
+INTEGER ()) 0 87 ())) 0 () () () 0 0)
+82 'wsave' '' '' 77 ((VARIABLE INOUT UNKNOWN-PROC UNKNOWN UNKNOWN 0 0
+DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (1 0 EXPLICIT (CONSTANT (
+INTEGER 4 0 0 0 INTEGER ()) 0 '1') (OP (INTEGER 4 0 0 0 INTEGER ()) 0
+PLUS (OP (INTEGER 4 0 0 0 INTEGER ()) 0 TIMES (CONSTANT (INTEGER 4 0 0 0
+INTEGER ()) 0 '4') (VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 84 ())) (
+CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '15'))) 0 () () () 0 0)
+83 'ifax' '' '' 77 ((VARIABLE IN UNKNOWN-PROC UNKNOWN UNKNOWN 0 0
+DIMENSION DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () (1 0 EXPLICIT (
+CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (CONSTANT (INTEGER 4 0 0 0
+INTEGER ()) 0 '10')) 0 () () () 0 0)
+84 'mauf' '' '' 77 ((VARIABLE IN UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 DUMMY)
+(INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+85 'mnauf' '' '' 77 ((VARIABLE IN UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 DUMMY)
+(INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+86 'maxl' '' '' 77 ((VARIABLE IN UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 DUMMY)
+(INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+87 'maxb' '' '' 77 ((VARIABLE IN UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 DUMMY)
+(INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+88 'mlevel' '' '' 77 ((VARIABLE IN UNKNOWN-PROC UNKNOWN UNKNOWN 0 0
+DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+89 'manf' '' '' 77 ((VARIABLE IN UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 DUMMY)
+(INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+93 'll' '' '' 92 ((VARIABLE IN UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 DUMMY) (
+INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+94 'x' '' '' 92 ((VARIABLE IN UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 DUMMY) (
+REAL 8 0 0 0 REAL ()) 0 0 () () 0 () () () 0 0)
+95 'z' '' '' 92 ((VARIABLE OUT UNKNOWN-PROC UNKNOWN UNKNOWN 0 0
+DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (1 0 EXPLICIT (CONSTANT (
+INTEGER 4 0 0 0 INTEGER ()) 0 '0') (OP (INTEGER 4 0 0 0 INTEGER ()) 0
+DIVIDE (OP (INTEGER 4 0 0 0 INTEGER ()) 0 PARENTHESES (OP (INTEGER 4 0 0
+0 INTEGER ()) 0 TIMES (OP (INTEGER 4 0 0 0 INTEGER ()) 0 PARENTHESES (
+OP (INTEGER 4 0 0 0 INTEGER ()) 0 PLUS (VARIABLE (INTEGER 4 0 0 0
+INTEGER ()) 0 93 ()) (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '3'))) (
+OP (INTEGER 4 0 0 0 INTEGER ()) 0 PARENTHESES (OP (INTEGER 4 0 0 0
+INTEGER ()) 0 PLUS (VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 93 ()) (
+CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '4'))))) (CONSTANT (INTEGER 4 0
+0 0 INTEGER ()) 0 '2'))) 0 () () () 0 0)
+98 'cxm' '' '' 97 ((VARIABLE INOUT UNKNOWN-PROC UNKNOWN UNKNOWN 0 0
+DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (1 0 EXPLICIT (CONSTANT (
+INTEGER 4 0 0 0 INTEGER ()) 0 '0') (CONSTANT (INTEGER 4 0 0 0 INTEGER ())
+0 '35999')) 0 () () () 0 0)
+99 'trigs' '' '' 97 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0 DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (1 0 EXPLICIT
+(CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (OP (INTEGER 4 0 0 0
+INTEGER ()) 0 TIMES (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '2') (
+VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 102 ()))) 0 () () () 0 0)
+100 'ifax' '' '' 97 ((VARIABLE IN UNKNOWN-PROC UNKNOWN UNKNOWN 0 0
+DIMENSION DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () (1 0 EXPLICIT (
+CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (CONSTANT (INTEGER 4 0 0 0
+INTEGER ()) 0 '10')) 0 () () () 0 0)
+101 'mnauf' '' '' 97 ((VARIABLE IN UNKNOWN-PROC UNKNOWN UNKNOWN 0 0
+DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+102 'maxl' '' '' 97 ((VARIABLE IN UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 DUMMY)
+(INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+105 'feldmn' '' '' 104 ((VARIABLE INOUT UNKNOWN-PROC UNKNOWN UNKNOWN 0 0
+DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (1 0 EXPLICIT (CONSTANT (
+INTEGER 4 0 0 0 INTEGER ()) 0 '0') (OP (INTEGER 4 0 0 0 INTEGER ()) 0
+MINUS (OP (INTEGER 4 0 0 0 INTEGER ()) 0 TIMES (OP (INTEGER 4 0 0 0
+INTEGER ()) 0 PARENTHESES (OP (INTEGER 4 0 0 0 INTEGER ()) 0 PLUS (
+VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 106 ()) (CONSTANT (INTEGER 4 0 0
+0 INTEGER ()) 0 '1'))) (OP (INTEGER 4 0 0 0 INTEGER ()) 0 PARENTHESES (
+OP (INTEGER 4 0 0 0 INTEGER ()) 0 PLUS (VARIABLE (INTEGER 4 0 0 0
+INTEGER ()) 0 106 ()) (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '2')))) (
+CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1'))) 0 () () () 0 0)
+106 'mm' '' '' 104 ((VARIABLE IN UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 DUMMY)
+(INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+107 'mmax' '' '' 104 ((VARIABLE IN UNKNOWN-PROC UNKNOWN UNKNOWN 0 0
+DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+)
+
+('dplgnd' 0 2 'gauleg' 0 7 'legtr' 0 14 'maxauf' 0 21 'phgcut' 0 22
+'phgpns' 0 36 'phgr213' 0 50 'phsym' 0 62 'phsymcut' 0 76 'phtogr' 0 90
+'plgnfa' 0 91 'rfourtr' 0 96 'spfilter' 0 103)
Index: preproc/src/preconvert.f90
===================================================================
--- preproc/src/preconvert.f90	(revision 57637935b8c736ecb0a376df5e8f6a044bbd05af)
+++ preproc/src/preconvert.f90	(revision 57637935b8c736ecb0a376df5e8f6a044bbd05af)
@@ -0,0 +1,470 @@
+PROGRAM PRECONVERT
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+  !                                                                 !
+  ! PROGRAM PRECONVERT - PREPARES INPUT DATA FOR POP MODEL METEOR-  !
+  !                      OLOGICAL PREPROCESSOR                      !
+  !                                                                 !
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+  !                                                                 !
+  ! CALCULATION OF ETAPOINT ON A REGULAR LAMDA/PHI GRID AND WRITING !
+  ! U,V,ETAPOINT,T,PS,Q,SD,MSL,TCC,10U, 10V, 2T,2D,LSP,CP,SSHF,SSR, !
+  ! EWSS,NSSS TO AN OUTPUT FILE (GRIB 1 or 2 FORMAT).               ! 
+  !                                                                 !
+  ! AUTHORS: L. HAIMBERGER, G. WOTAWA, 1994-04                      !
+  !                     adapted: A. BECK                            !
+  !                     2003-05-11                                  !
+  !          L. Haimberger 2006-12    V2.0                          !
+  !                    modified to handle arbitrary regular grids   !
+  !                    and T799 resolution data                     !
+  !          L. Haimberger 2010-03    V4.0                          !
+  !                    modified to grib edition 2 fields            !
+  !                    and T1279 resolution data                    !
+  !                                                                 !
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+  !                                                                 !
+  ! DESCRIPTION OF NEEDED INPUT:                                    !
+  !                                                                 !
+  !       FILE      PARAMETER(S)    DATA REPRESENTATION             !
+  !                                                                 !
+  !       fort.10   U,V             spherical harmonics             !
+  !       fort.11   T               regular lamda phi grid          !
+  !       fort.12   LNSP            spherical harmonics             !
+  !       fort.13   D               spherical harmonics             !
+  !       fort.14   SD,MSL,TCC,10U,                                 !
+  !                 10V,2T,2D       regular lamda phi grid          !
+  !       fort.18   Q               regular lamda phi grid          !
+  !                                                                 !
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+  !                                                                 !
+  ! DESCRIPTION OF OUTPUT:                                          !
+  !                                                                 !
+  ! UNIT  FILE      PARAMETER(S)    DATA REPRESENTATION             !
+  !                                                                 !
+  ! 15    fort.15   U,V,ETA,T,PS,                                   !
+  !                 Q,SD,MSL,TCC,                                   !
+  !                 10U,10V,2T,2D,  regular lamda phi grid          !
+  !                 LSP,CP,SSHF,                                    !
+  !                 SSR,EWSS,NSSS                                   !
+  !                                                                 !
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+  !
+
+  USE PHTOGR
+  USE GRTOPH
+  USE FTRAFO
+  USE RWGRIB2
+  USE GRIB_API
+
+  IMPLICIT NONE
+
+  REAL, ALLOCATABLE, DIMENSION (:,:)   :: Z
+  REAL, ALLOCATABLE, DIMENSION (:,:,:) :: T, UV 
+  REAL, ALLOCATABLE, DIMENSION (:,:,:) :: DIV, ETA
+  REAL, ALLOCATABLE, DIMENSION (:,:)   :: DPSDL, DPSDM
+  REAL, ALLOCATABLE, DIMENSION (:,:,:) :: PS,DPSDT
+  REAL, ALLOCATABLE, DIMENSION (:)     :: WSAVE,H
+  REAL, ALLOCATABLE, DIMENSION (:)     :: BREITE, GBREITE
+  REAL, ALLOCATABLE, DIMENSION (:)     :: AK, BK, PV
+  INTEGER                              :: NPV
+
+  ! Arrays for Gaussian grid calculations
+
+  REAL  :: X1,X2,RMS,MW,SIG,LAM
+  REAL,ALLOCATABLE :: CUA(:,:,:),CVA(:,:,:)
+
+  REAL, ALLOCATABLE, DIMENSION (:,:) :: P,PP !,P2
+  REAL, ALLOCATABLE, DIMENSION (:,:) :: XMN,HILFUV
+  REAL, ALLOCATABLE, DIMENSION (:)   :: LNPMN,LNPMN2,LNPMN3
+  REAL, ALLOCATABLE, DIMENSION (:)   :: WEIGHT
+  REAL, ALLOCATABLE, DIMENSION (:,:) :: UGVG
+  REAL, ALLOCATABLE, DIMENSION (:,:) :: DG, ETAG
+  REAL, ALLOCATABLE, DIMENSION (:,:) :: GWSAVE
+  REAL, ALLOCATABLE, DIMENSION (:)   :: PSG,HILF
+
+  ! end arrays for Gaussian grid calculations
+
+  INTEGER, ALLOCATABLE, DIMENSION (:) :: MLAT
+  INTEGER, ALLOCATABLE :: GIFAX(:,:)
+
+  REAL, PARAMETER   :: PI=ACOS(-1.D0)
+
+  REAL COSB,DAK,DBK,P00
+  REAL URLAR8,JMIN1,LLLAR8,MAXBMIN1,PIR8,DCOSB
+
+  INTEGER I,J,K,L,IERR,M,MK,NGI,NGJ
+  INTEGER LUNIT,LUNIT_OUT
+
+  INTEGER MAXL, MAXB, MLEVEL, LEVOUT,LEVMIN,LEVMAX
+  INTEGER MGAUSS,MSMOOTH, MNAUF,META
+  INTEGER MDPDETA,METAPAR
+  REAL RLO0, RLO1, RLA0, RLA1
+  CHARACTER*300 MLEVELIST
+
+  INTEGER MAUF, MANF,IFAX(10)
+
+  INTEGER igrib,iret
+
+  CHARACTER*80 FILENAME
+
+  NAMELIST /NAMGEN/ &
+       MAXL, MAXB,  &
+       MLEVEL,MLEVELIST,MNAUF,METAPAR, &
+       RLO0, RLO1, RLA0, RLA1, &
+       MGAUSS,MSMOOTH,META,&
+       MDPDETA
+
+  read (4,NAMGEN)
+
+  PRINT*, 'MAXL= ', MAXL, ' RLO0 = ', RLO0, ' RLO1 = ', RLO1
+  MAUF=INT(360.*(REAL(MAXL)-1.)/(RLO1-RLO0)+0.0001)
+  PRINT*, 'MAUF= ', MAUF
+
+  MANF=INT(REAL(MAUF)/360.*(360.+RLO0)+1.0001)
+  PRINT*, 'MANF= ', MANF
+
+  IF(MANF .gt. MAUF) MANF=MANF-MAUF
+
+
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+  !     GAUSS STUFF !
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+  ! computation of etadot on gaussian grid
+
+! a new grib message is loaded from an existing sample.
+! we want a regular gaussian grid
+! set the environment variable GRIB_SAMPLES_PATH
+  write (filename, "(A13,I0,A3,I0)") "EI_regular_gg",MNAUF+1,"_ml", MLEVEL
+  call grib_new_from_samples(igrib, FILENAME)
+
+  call grib_get(igrib,'numberOfPointsAlongAMeridian', NGJ)
+  ALLOCATE (MLAT(NGJ))
+
+  !     get as a integer
+  call grib_get(igrib,'pl', MLAT)
+  print*,'Number of points along a meridian  = ', NGJ
+  NGI=SUM(MLAT)
+
+  call grib_get(igrib,'numberOfVerticalCoordinateValues',mk)
+  print*, 'numberOfVerticalCoordinateValues = ', mk
+
+  IF(mk/2-1 .ne. MLEVEL) THEN 
+     WRITE(*,*) 'FATAL: Number of model levels',mk, &
+          ' does not agree with', MLEVEL,' in namelist'
+     STOP
+  ENDIF
+
+  call grib_get_size(igrib,'pv',npv)
+  allocate(pv(npv))
+  call grib_get(igrib,'pv',pv)
+  ALLOCATE(AK(NPV/2))
+  ALLOCATE(BK(NPV/2))
+  AK=pv(:NPV/2)
+  BK=pv(NPV/2+1:)
+  deallocate(pv)
+! END GAUSS INFO
+
+
+
+  ! Initialization of Legendre transform on LAT/LON grid.
+
+  ALLOCATE (BREITE(MAXB))
+  ALLOCATE (Z(0:((MNAUF+3)*(MNAUF+4))/2,MAXB))
+  !$OMP PARALLEL DO
+  DO  J=1,MAXB
+     BREITE(J)=SIN((RLA1-(J-1.D0)*(RLA1-RLA0)/(MAXB-1))* PI/180.D0)
+     CALL PLGNFA(MNAUF,BREITE(J),Z(0,J))
+  ENDDO
+  !$OMP END PARALLEL DO
+
+
+  ! Initialisation of fields for  FFT and Legendre transformation
+  !	to  Gaussian grid and back to phase space
+  ALLOCATE (GBREITE(NGJ),WEIGHT(NGJ))
+  ALLOCATE (P(0:((MNAUF+3)*(MNAUF+4))/2,NGJ/2))
+  ALLOCATE (PP(NGJ/2,0:((MNAUF+3)*(MNAUF+4))/2))
+  X1=-1.D0
+  X2=1.D0
+  CALL GAULEG(X1,X2,GBREITE,WEIGHT,NGJ)
+
+  !$OMP PARALLEL DO PRIVATE(M)
+  DO J=1,NGJ/2
+     CALL PLGNFA(MNAUF,GBREITE(J),P(:,J))
+     DO M=0,(MNAUF+3)*(MNAUF+4)/2
+        PP(J,M)=P(M,J)
+     ENDDO
+  ENDDO
+  !$OMP END PARALLEL DO
+
+
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+!   READ LNSP
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+  FILENAME='fort.12'
+  ALLOCATE (LNPMN(0:(MNAUF+1)*(MNAUF+2)-1))
+  CALL READSPECTRAL(FILENAME,LNPMN,MNAUF,1,MLEVEL,(/152/))
+  ! Call set99 an initialization routine that must be called once
+  ! before a sequence of calls to the fft routines
+  ALLOCATE (WSAVE(4*MAUF+15))
+  ALLOCATE (PS(MAXL, MAXB,1))
+  CALL SET99(WSAVE,IFAX,mauf)
+  CALL PHGCUT(LNPMN,PS,WSAVE,IFAX,Z, &
+       MNAUF,MNAUF,MAUF,MANF,MAXL,MAXB,1)
+  CALL STATIS(MAXL,MAXB,1,EXP(PS),RMS,MW,SIG)
+  WRITE(*,'(A12,3F12.4)') 'STATISTICS : ',RMS,MW,SIG
+
+  ALLOCATE (GWSAVE(8*NGJ+15,NGJ/2))
+  ALLOCATE (GIFAX(10,NGJ))
+  DO J=1,NGJ/2
+     CALL SET99(GWSAVE(1,J),GIFAX(1,J),MLAT(J))
+  ENDDO
+  ALLOCATE (PSG(NGI),HILF(NGI))
+  ALLOCATE (LNPMN2(0:(MNAUF+1)*(MNAUF+2)-1))
+  CALL PHGR213(LNPMN,HILF,GWSAVE,GIFAX,P,MLAT,MNAUF,NGI,NGJ,1)
+  PSG=HILF
+  CALL GRPH213(LNPMN2,PSG,GWSAVE,GIFAX,PP,WEIGHT,MLAT, &
+       MNAUF,NGI,NGJ,1)
+  CALL PHGR213(LNPMN2,HILF,GWSAVE,GIFAX,P,MLAT,MNAUF,NGI,NGJ,1)
+
+
+  HILF=exp(PSG)-exp(HILF)
+
+  CALL STATIS(NGI,1,1,HILF,RMS,MW,SIG)
+  WRITE(*,'(A12,3F11.4)') 'STATISTICS: ',RMS,MW,SIG
+
+  PSG=EXP(PSG)
+  HILF=PSG
+  CALL STATIS(NGI,1,1,HILF,RMS,MW,SIG)
+  WRITE(*,'(A12,3F11.4)') 'STATISTICS: ',RMS,MW,SIG
+
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+!   READ U/V
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+  FILENAME='fort.10'
+  ALLOCATE (XMN(0:(MNAUF+1)*(MNAUF+2)-1, 2*MLEVEL))
+  CALL READSPECTRAL(FILENAME, &
+       XMN,MNAUF,2*MLEVEL,MLEVEL,(/131,132/)) 
+  ! Transform winds on gaussian grid
+  ALLOCATE (UGVG(NGI, 2*MLEVEL))
+  CALL PHGR213(XMN,UGVG,GWSAVE,GIFAX,P,MLAT,MNAUF,NGI,NGJ,2*MLEVEL)
+  ALLOCATE (CUA(2,4,MLEVEL))
+  ALLOCATE (CVA(2,4,MLEVEL))
+  DO K=1,MLEVEL
+     ! North Pole
+     CALL JSPPOLE(XMN(:,K),1,MNAUF,.TRUE.,CUA(:,:,K))
+     CALL JSPPOLE(XMN(:,MLEVEL+K),1,MNAUF,.TRUE.,CVA(:,:,K))
+     ! South Pole
+     CALL JSPPOLE(XMN(:,K),-1,MNAUF,.TRUE.,CUA(:,3:4,K))
+     CALL JSPPOLE(XMN(:,MLEVEL+K),-1,MNAUF,.TRUE.,CVA(:,3:4,K))
+  ENDDO
+
+  IF(MSMOOTH .ne. 0) THEN
+    DO K=1,2*MLEVEL
+       CALL SPFILTER(XMN(:,K),MNAUF,MSMOOTH)
+    ENDDO
+  ENDIF
+  ALLOCATE (UV(MAXL, MAXB, 2*MLEVEL))
+  CALL PHGCUT(XMN,UV,WSAVE,IFAX,Z, &
+       MNAUF,MNAUF,MAUF,MANF,MAXL,MAXB,2*MLEVEL)
+
+
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+!   READ Divergence
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+  FILENAME='fort.13'
+  CALL READSPECTRAL(FILENAME,XMN,MNAUF,MLEVEL,MLEVEL,(/155/))
+  ! Tranform horizontal divergence on gaussian grid
+  ALLOCATE (DG(NGI,MLEVEL))
+  CALL PHGR213(XMN,DG,GWSAVE,GIFAX,P,MLAT,MNAUF,NGI,NGJ,MLEVEL)
+
+
+  ! compute gradient of LNSP (log of surface pressure) on gaussian grid 
+  ALLOCATE (H(0:(MNAUF+2)*(MNAUF+3)/2))
+  ALLOCATE (DPSDL(NGI,1),DPSDM(NGI,1))
+  CALL PHGRAD(LNPMN,DPSDL,DPSDM,GWSAVE,GIFAX,P,H,MLAT,MNAUF,NGI,NGJ,1)
+
+  ! Compute vertical weed spind on gaussian grid
+  ALLOCATE (ETAG(NGI,MLEVEL))
+  CALL CONTGL(HILF,DPSDL,DPSDM,DG,UGVG(:,1),UGVG(:,MLEVEL+1), &
+       GBREITE,ETAG,MLAT,AK,BK,NGI,NGJ,MLEVEL)
+
+
+  CALL GRPH213(XMN,ETAG,GWSAVE,GIFAX,PP,WEIGHT,MLAT, &
+       MNAUF,NGI,NGJ,MLEVEL)
+  IF(MSMOOTH .ne. 0) THEN
+    DO K=1,MLEVEL
+       CALL SPFILTER(XMN(:,K),MNAUF,MSMOOTH)
+    ENDDO
+  ENDIF
+  ALLOCATE (ETA(MAXL,MAXB,MLEVEL))
+  CALL PHGCUT(XMN,ETA,WSAVE,IFAX,Z,MNAUF,MNAUF,MAUF,MANF,MAXL,MAXB,MLEVEL)
+
+  CALL GRPH213(XMN,HILF,GWSAVE,GIFAX,PP,WEIGHT,MLAT, MNAUF,NGI,NGJ,1)
+
+  IF(MSMOOTH .ne. 0) CALL SPFILTER(XMN(:,1),MNAUF,MSMOOTH)
+  ALLOCATE (DPSDT(MAXL, MAXB,1))
+  CALL PHGCUT(XMN,DPSDT,WSAVE,IFAX,Z,MNAUF,MNAUF,MAUF,MANF,MAXL,MAXB,1)
+
+  CALL STATIS(MAXL,MAXB,1,DPSDT,RMS,MW,SIG)
+  WRITE(*,'(A12,3F11.4)') 'STATISTICS DPSDT: ',RMS,MW,SIG
+
+  CALL GRPH213(XMN,PSG,GWSAVE,GIFAX,PP,WEIGHT,MLAT,MNAUF,NGI,NGJ,1)
+  CALL PHGCUT(XMN,PS,WSAVE,IFAX,Z,MNAUF,MNAUF,MAUF,MANF,MAXL,MAXB,1)
+
+  CALL STATIS(MAXL,MAXB,1,PS,RMS,MW,SIG)
+  WRITE(*,'(A12,3F11.4)') 'STATISTICS: ',RMS,MW,SIG
+
+114 DEALLOCATE(HILF,PSG,DPSDL,DPSDM,ETAG,DG,LNPMN)
+
+  DEALLOCATE(PP,P,UGVG,MLAT,GBREITE,WEIGHT,GWSAVE,XMN)
+
+  ! CREATE FILE VERTICAL.EC NEEDED BY POP MODEL
+
+  open(21,file='VERTICAL.EC')
+  write(21,'(a)')
+  write(21,'(a)') 'VERTICAL DISCRETIZATION OF POP MODEL'
+  write(21,'(a)')
+  write(21,'(i3,a)') MLEVEL,'   number of layers'
+  write(21,'(a)')
+  write(21,'(a)') '* A(NLEV+1)'
+  write(21,'(a)')
+  do  i=1,MLEVEL+1
+     write(21,'(f18.12)') AK(I)
+  enddo
+  write(21,'(a)')
+  write(21,'(a)') '* B(NLEV+1)'
+  write(21,'(a)')
+  do  i=1,MLEVEL+1
+     write(21,'(f18.12)') BK(I)
+  enddo
+  close(21)
+
+
+  !     Calculation of etadot in CONTGL needed scaled winds (ucosphi,vcosphi)
+  !     Now we are transforming back to the usual winds. 
+  ALLOCATE (HILFUV(2*MAXL,2))
+  DO K=1,MLEVEL
+     DO J=2,MAXB-1
+        COSB=SQRT(1.0-(BREITE(J))*(BREITE(J)))
+        UV(:,J,K)=UV(:,J,K)/COSB
+        UV(:,J,MLEVEL+K)=UV(:,J,MLEVEL+K)/COSB
+     ENDDO
+     ! special treatment for poles, if necessary. 
+     DO J=1,MAXB,MAXB-1
+        COSB=SQRT(1.0-(BREITE(J))*(BREITE(J)))
+        if(1.0-BREITE(J)*BREITE(J) .gt. 0 .OR. MGAUSS .NE. 1) then
+           IF(RLA0 .EQ. -90.0 .AND. J .EQ. MAXB .OR. &
+                RLA1 .EQ. 90.0 .AND. J .EQ. 1) then
+              UV(:,J,K)=UV(:,J,K)*1.D6
+              UV(:,J,MLEVEL+K)=UV(:,J,MLEVEL+K)*1.D6
+           else
+              UV(:,J,K)=UV(:,J,K)/COSB
+              UV(:,J,MLEVEL+K)=UV(:,J,MLEVEL+K)/COSB
+           endif
+        else
+           HILFUV(5:MAXL,:)=0.
+           HILFUV(1:2,:)=0.
+           IF(J.EQ.MAXB) THEN
+              ! Suedpol
+              HILFUV(3:4,1)=CUA(:,4,K)
+              HILFUV(3:4,2)=CVA(:,4,K)
+           ELSE
+              ! Nordpol
+              HILFUV(3:4,1)=CUA(:,2,K)
+              HILFUV(3:4,2)=CVA(:,2,K)
+           ENDIF
+           CALL RFOURTR(HILFUV(:,1),WSAVE,IFAX,MAXL/2-1,MAXL)
+           DO I=0,MAXL-1
+              IF(MANF+I.LE.MAXL) THEN
+                 UV(I+1,J,K)=HILFUV(MANF+I,1)
+              ELSE
+                 UV(I+1,J,K)=HILFUV(MANF-MAXL+I,1)
+              ENDIF
+           ENDDO
+           CALL RFOURTR(HILFUV(:,2),WSAVE,IFAX,MAXL/2-1,MAXL)
+           DO I=0,MAXL-1
+              IF(MANF+I.LE.MAXL) THEN
+                 UV(I+1,J,MLEVEL+K)=HILFUV(MANF+I,2)
+              ELSE
+                 UV(I+1,J,MLEVEL+K)=HILFUV(MANF-MAXL+I,2)
+              ENDIF
+           ENDDO
+        endif
+     ENDDO
+  ENDDO
+
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+  !                      READING OF T                      !
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+  ALLOCATE (T(MAXL, MAXB, MLEVEL))
+  FILENAME='fort.11'
+  CALL READLATLON(FILENAME,T,MAXL,MAXB,MLEVEL,(/130/))
+
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+  !                    WRITE MODEL LEVEL DATA TO fort.15            !
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+  ! open output file
+  call grib_open_file(LUNIT,'fort.15','w')
+
+  ! we use temperature on lat/lon on model levels as template for model level data
+  LUNIT_OUT=0
+  call grib_open_file(LUNIT_OUT,'fort.11','r')
+  call grib_new_from_file(LUNIT_OUT,igrib, iret)
+  call grib_close_file(LUNIT_OUT)
+
+
+  CALL WRITELATLON(LUNIT,igrib,UV(:,:,1),MAXL,MAXB,MLEVEL,MLEVELIST,131)
+
+  CALL WRITELATLON(LUNIT,igrib,UV(:,:,MLEVEL+1),MAXL,MAXB,MLEVEL,MLEVELIST,132)
+
+  CALL WRITELATLON(LUNIT,igrib,ETA,MAXL,MAXB,MLEVEL,MLEVELIST,METAPAR)
+
+  CALL WRITELATLON(LUNIT,igrib,T,MAXL,MAXB,MLEVEL,MLEVELIST,130)
+
+  CALL WRITELATLON(LUNIT,igrib,PS,MAXL,MAXB,1,'1',134)
+
+  call grib_close_file(LUNIT)
+
+
+2000 STOP 'SUCCESSFULLY FINISHED CONVERT_PRE: CONGRATULATIONS'
+3000 STOP 'ROUTINE CONVERT_PRE: ERROR'
+9999 stop 'ROUTINE CONVERT_PRE: ERROR'
+
+CONTAINS
+
+  SUBROUTINE STATIS (NI,NJ,NK,PHI,RMS,MW,SIG)
+    IMPLICIT NONE
+
+    integer, intent(in) :: NI, NJ, NK
+
+    REAL PHI(NI,NJ,NK),SIG,MW,RMS,P
+    INTEGER N
+
+    N=NI*NJ*NK
+
+    RMS=0.
+    MW=0.
+
+    DO  I=1,NI
+       DO  J=1,NJ
+          DO  K=1,NK
+             P=PHI(I,J,K)
+             RMS=RMS+P*P
+             MW=MW+P
+          ENDDO
+       ENDDO
+    ENDDO
+
+    RMS=SQRT(RMS/N)
+    MW=MW/N
+
+    IF(RMS*RMS-MW*MW.LT.0.) THEN	  
+       SIG=0.0
+    ELSE
+       SIG=SQRT(RMS*RMS-MW*MW)
+    ENDIF
+
+    RETURN
+  END SUBROUTINE STATIS
+
+END PROGRAM PRECONVERT
Index: preproc/src/rwGRIB2.f90
===================================================================
--- preproc/src/rwGRIB2.f90	(revision 57637935b8c736ecb0a376df5e8f6a044bbd05af)
+++ preproc/src/rwGRIB2.f90	(revision 57637935b8c736ecb0a376df5e8f6a044bbd05af)
@@ -0,0 +1,237 @@
+MODULE RWGRIB2
+
+CONTAINS
+
+  SUBROUTINE READLATLON(FILENAME,FELD,MAXL,MAXB,MLEVEL,MPAR)
+
+    USE GRIB_API
+
+    IMPLICIT NONE
+
+    integer                            ::  ifile
+    integer                            ::  iret
+    integer                            ::  n,mk,parid,nm
+    integer                            ::  i,k
+    integer,dimension(:),allocatable   ::  igrib
+    integer                            ::  numberOfPointsAlongAParallel
+    integer                            ::  numberOfPointsAlongAMeridian
+    real, dimension(:), allocatable    ::  values
+    integer                            ::  numberOfValues
+    real,dimension(maxl,maxb,mlevel)   ::  feld  
+    integer:: maxl,maxb,mlevel,mstride,mpar(:),irest,div
+    integer :: l(size(mpar))
+    character*(*):: filename                             
+
+    call grib_open_file(ifile, TRIM(FILENAME),'r')
+
+    ! count the messages in the file
+    call grib_count_in_file(ifile,n)
+    allocate(igrib(n))
+    igrib=-1
+
+    ! Load the messages from the file.
+    DO i=1,n
+       call grib_new_from_file(ifile,igrib(i), iret)
+    END DO
+
+    ! we can close the file
+    call grib_close_file(ifile)
+
+    nm=size(mpar)
+    div=mlevel/nm
+    l=0
+
+    ! Loop on all the messages in memory
+    iloop:  DO i=1,n
+       !      write(*,*) 'processing message number ',i
+       !     get as a integer
+       call grib_get(igrib(i),'numberOfPointsAlongAParallel', &
+            numberOfPointsAlongAParallel)
+
+       !     get as a integer
+       call grib_get(igrib(i),'numberOfPointsAlongAMeridian', &
+            numberOfPointsAlongAMeridian)
+
+       call grib_get(igrib(i),'numberOfVerticalCoordinateValues',mk)
+
+       call grib_get_size(igrib(i),'values',numberOfValues)
+       !      write(*,*) 'numberOfValues=',numberOfValues
+
+       allocate(values(numberOfValues), stat=iret)
+       !     get data values
+       call grib_get(igrib(i),'values',values)
+
+       call grib_get(igrib(i),'paramId',parid)
+
+       kloop:  do k=1,nm
+          if(parid .eq. mpar(k)) then
+             l(k)=l(k)+1
+             feld(:,:,(k-1)*div+l(k))=reshape(values,(/maxl,maxb/))
+             !         print*,(k-1)*div+l(k),parid
+             exit kloop
+          endif
+       enddo kloop
+       if(k .gt. nm .and. parid .ne. mpar(nm)) then
+          write(*,*) k,nm,parid,mpar(nm)
+          write(*,*) 'ERROR readlatlon: parameter ',parid,'is not',mpar
+          stop
+       endif
+
+       !      print*,i
+      deallocate(values)
+    END DO iloop
+    write(*,*) 'readlatlon: ',i-1,' records read'
+
+    DO i=1,n
+       call grib_release(igrib(i))
+    END DO
+
+    deallocate(igrib)
+
+  END SUBROUTINE READLATLON
+
+  SUBROUTINE WRITELATLON(iunit,igrib,FELD,MAXL,MAXB,MLEVEL,&
+       MLEVELIST,MPAR)
+
+    USE GRIB_API
+
+    IMPLICIT NONE
+
+    INTEGER IFIELD,MLEVEL,MNAUF,I,J,K,L,IERR,JOUT
+    INTEGER MPAR,MAXL,MAXB,LEVMIN,LEVMAX
+    INTEGER IUNIT,igrib
+    REAL ZSEC4(MAXL*MAXB)
+    REAL    FELD(MAXL,MAXB,MLEVEL)
+    CHARACTER*(*) MLEVELIST
+    INTEGER ILEVEL(MLEVEL),MLINDEX(MLEVEL+1),LLEN
+
+    ! parse MLEVELIST
+
+    LLEN=len(trim(MLEVELIST))
+    if(index(MLEVELIST,'to') .ne. 0 .or. index(MLEVELIST,'TO') .ne. 0) THEN
+       i=index(MLEVELIST,'/')
+       read(MLEVELIST(1:i-1),*) LEVMIN
+       i=index(MLEVELIST,'/',.true.)
+       read(MLEVELIST(i+1:LLEN),*) LEVMAX
+       l=0
+       do i=LEVMIN,LEVMAX
+          l=l+1
+          ILEVEL(l)=i
+       enddo
+    else
+       l=1
+       MLINDEX(1)=0
+       do i=1,LLEN
+          if(MLEVELIST(i:i) .eq. '/') THEN
+             l=l+1
+             MLINDEX(l)=i
+	  endif
+       enddo
+       MLINDEX(l+1)=LLEN+1
+       do i=1,l
+	  read(MLEVELIST(MLINDEX(i)+1:MLINDEX(i+1)-1),*) ILEVEL(i)
+       enddo
+    endif
+
+    DO k=1,l
+       call grib_set(igrib,"level",ILEVEL(k))
+       call grib_set(igrib,"paramId",MPAR)
+       if(l .ne. mlevel) then
+          zsec4(1:maxl*maxb)=RESHAPE(FELD(:,:,ILEVEL(k)),(/maxl*maxb/))
+       else
+          zsec4(1:maxl*maxb)=RESHAPE(FELD(:,:,k),(/maxl*maxb/))
+       endif
+       call grib_set(igrib,"values",zsec4)
+
+       call grib_write(igrib,iunit)
+
+    ENDDO
+
+  END SUBROUTINE WRITELATLON
+
+  SUBROUTINE READSPECTRAL(FILENAME,CXMN,MNAUF,MLEVEL,&
+       MAXLEV,MPAR)
+
+    USE GRIB_API
+
+    IMPLICIT NONE
+
+    character*(*),               intent(in)    :: filename      
+
+    integer                            ::  ifile
+    integer                            ::  iret
+    integer                            ::  n,mk,div,nm,k
+    integer                            ::  i,j,parid
+    integer,dimension(:),allocatable   ::  igrib
+    real, dimension(:), allocatable    ::  values
+    integer                            ::  numberOfValues,maxlev  
+    REAL:: CXMN(0:(MNAUF+1)*(MNAUF+2)-1,MLEVEL)
+    integer:: maxl,maxb,mlevel,mstride,mpar(:),mnauf,ioffset,ipar,ilev,l(size(mpar))
+
+    call grib_open_file(ifile, TRIM(FILENAME),'r')
+
+    ! count the messages in the file
+    call grib_count_in_file(ifile,n)
+    allocate(igrib(n))
+    igrib=-1
+
+    ! Load the messages from the file.
+    DO i=1,n
+       call grib_new_from_file(ifile,igrib(i), iret)
+    END DO
+
+    ! we can close the file
+    call grib_close_file(ifile)
+
+    l=0
+    ! Loop on all the messages in memory
+    iloop: DO i=1,n
+       ! write(*,*) 'processing message number ',i
+       !     get as a integer
+       call grib_get(igrib(i),'pentagonalResolutionParameterJ', j)
+
+       call grib_get_size(igrib(i),'values',numberOfValues)
+       !   write(*,*) 'numberOfValues=',numberOfValues
+
+       call grib_get(igrib(i),'numberOfVerticalCoordinateValues',mk)
+
+       call grib_get(igrib(i),'level',ilev)
+
+       allocate(values(numberOfValues), stat=iret)
+       !     get data values
+       call grib_get(igrib(i),'values',values)
+
+       call grib_get(igrib(i),'paramId',parid)
+       nm=size(mpar)
+       div=mlevel/nm
+       kloop:  do k=1,nm
+          if(parid .eq. mpar(k)) then
+             l(k)=l(k)+1
+             cxmn(:,(k-1)*div+l(k))=values(1:(MNAUF+1)*(MNAUF+2))
+             !         print*,(k-1)*div+l(k),parid
+             exit kloop
+          endif
+
+       enddo kloop
+       if(k .gt. nm .and. parid .ne. mpar(nm)) then
+          write(*,*) k,nm,parid,mpar(nm)
+          write(*,*) 'ERROR readspectral: parameter ',parid,'is not',mpar
+          stop
+       endif
+
+       !      print*,i
+      deallocate(values)
+
+    END DO iloop
+
+    write(*,*) 'readspectral: ',i-1,' records read'
+
+    DO i=1,n
+       call grib_release(igrib(i))
+    END DO
+
+    deallocate(igrib)
+
+  END SUBROUTINE READSPECTRAL
+
+END MODULE RWGRIB2
Index: preproc/src/rwgrib2.mod
===================================================================
--- preproc/src/rwgrib2.mod	(revision 57637935b8c736ecb0a376df5e8f6a044bbd05af)
+++ preproc/src/rwgrib2.mod	(revision 57637935b8c736ecb0a376df5e8f6a044bbd05af)
@@ -0,0 +1,96 @@
+GFORTRAN module version '10' created from rwGRIB2.f90
+MD5:611dc0b42e59dcc7088fedeb566ff3e4 -- If you edit this, you'll get what you deserve.
+
+(() () () () () () () () () () () () () () () () () () () () () () ()
+() () () ())
+
+()
+
+()
+
+()
+
+()
+
+()
+
+(2 'readlatlon' 'rwgrib2' '' 1 ((PROCEDURE UNKNOWN-INTENT MODULE-PROC
+DECL UNKNOWN 0 0 SUBROUTINE ALWAYS_EXPLICIT) (UNKNOWN 0 0 0 0 UNKNOWN ())
+3 0 (4 5 6 7 8 9) () 0 () () () 0 0)
+10 'readspectral' 'rwgrib2' '' 1 ((PROCEDURE UNKNOWN-INTENT MODULE-PROC
+DECL UNKNOWN 0 0 SUBROUTINE ALWAYS_EXPLICIT) (UNKNOWN 0 0 0 0 UNKNOWN ())
+11 0 (12 13 14 15 16 17) () 0 () () () 0 0)
+18 'rwgrib2' 'rwgrib2' '' 1 ((MODULE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0) (UNKNOWN 0 0 0 0 UNKNOWN ()) 0 0 () () 0 () () () 0 0)
+19 'writelatlon' 'rwgrib2' '' 1 ((PROCEDURE UNKNOWN-INTENT MODULE-PROC
+DECL UNKNOWN 0 0 SUBROUTINE) (UNKNOWN 0 0 0 0 UNKNOWN ()) 20 0 (21 22 23
+24 25 26 27 28) () 0 () () () 0 0)
+4 'filename' '' '' 3 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0 DUMMY) (CHARACTER 1 0 0 0 CHARACTER (())) 0 0 () () 0 () ()
+() 0 0)
+5 'feld' '' '' 3 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN
+0 0 DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (3 0 EXPLICIT (
+CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (VARIABLE (INTEGER 4 0 0 0
+INTEGER ()) 0 6 ()) (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (
+VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 7 ()) (CONSTANT (INTEGER 4 0 0 0
+INTEGER ()) 0 '1') (VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 8 ())) 0 ()
+() () 0 0)
+6 'maxl' '' '' 3 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN
+0 0 DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+7 'maxb' '' '' 3 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN
+0 0 DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+8 'mlevel' '' '' 3 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0 DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+9 'mpar' '' '' 3 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN
+0 0 DIMENSION DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () (1 0
+ASSUMED_SHAPE (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') ()) 0 () ()
+() 0 0)
+12 'filename' '' '' 11 ((VARIABLE IN UNKNOWN-PROC UNKNOWN UNKNOWN 0 0
+DUMMY) (CHARACTER 1 0 0 0 CHARACTER (())) 0 0 () () 0 () () () 0 0)
+13 'cxmn' '' '' 11 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0 DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (2 0 EXPLICIT
+(CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '0') (OP (INTEGER 4 0 0 0
+INTEGER ()) 0 MINUS (OP (INTEGER 4 0 0 0 INTEGER ()) 0 TIMES (OP (
+INTEGER 4 0 0 0 INTEGER ()) 0 PARENTHESES (OP (INTEGER 4 0 0 0 INTEGER ())
+0 PLUS (VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 14 ()) (CONSTANT (
+INTEGER 4 0 0 0 INTEGER ()) 0 '1'))) (OP (INTEGER 4 0 0 0 INTEGER ()) 0
+PARENTHESES (OP (INTEGER 4 0 0 0 INTEGER ()) 0 PLUS (VARIABLE (INTEGER 4
+0 0 0 INTEGER ()) 0 14 ()) (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '2'))))
+(CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1')) (CONSTANT (INTEGER 4 0 0
+0 INTEGER ()) 0 '1') (VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 15 ())) 0
+() () () 0 0)
+14 'mnauf' '' '' 11 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0 DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+15 'mlevel' '' '' 11 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0 DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+16 'maxlev' '' '' 11 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0 DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+17 'mpar' '' '' 11 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0 DIMENSION DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () (1 0
+ASSUMED_SHAPE (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') ()) 0 () ()
+() 0 0)
+21 'iunit' '' '' 20 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0 DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+22 'igrib' '' '' 20 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0 DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+23 'feld' '' '' 20 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0 DIMENSION DUMMY) (REAL 8 0 0 0 REAL ()) 0 0 () (3 0 EXPLICIT
+(CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (VARIABLE (INTEGER 4 0 0 0
+INTEGER ()) 0 24 ()) (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') (
+VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 25 ()) (CONSTANT (INTEGER 4 0 0
+0 INTEGER ()) 0 '1') (VARIABLE (INTEGER 4 0 0 0 INTEGER ()) 0 26 ())) 0
+() () () 0 0)
+24 'maxl' '' '' 20 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0 DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+25 'maxb' '' '' 20 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0 DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+26 'mlevel' '' '' 20 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0 DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+27 'mlevelist' '' '' 20 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0 DUMMY) (CHARACTER 1 0 0 0 CHARACTER (())) 0 0 () () 0 () ()
+() 0 0)
+28 'mpar' '' '' 20 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN
+UNKNOWN 0 0 DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0)
+)
+
+('readlatlon' 0 2 'readspectral' 0 10 'rwgrib2' 0 18 'writelatlon' 0 19)
