diff --git a/.gitignore b/.gitignore index 6769e21..68bc17f 100644 --- a/.gitignore +++ b/.gitignore @@ -157,4 +157,4 @@ cython_debug/ # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore # and can be added to the global gitignore or merged into this file. For a more nuclear # option (not recommended) you can uncomment the following to ignore the entire idea folder. -#.idea/ \ No newline at end of file +#.idea/ diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 0000000..e0fd984 --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,30 @@ +repos: +- repo: https://github.com/astral-sh/ruff-pre-commit + # Ruff version. + rev: v0.4.1 + hooks: + # Run the linter. + # To be renabled once fixes are made. + # - id: ruff + # args: [ --fix ] + # Run the formatter. + - id: ruff-format + +- repo: https://github.com/pre-commit/pre-commit-hooks + rev: v4.6.0 + hooks: + - id: end-of-file-fixer + - id: check-yaml + - id: check-added-large-files + +ci: + autofix_commit_msg: | + [pre-commit.ci] auto fixes from pre-commit.com hooks + + for more information, see https://pre-commit.ci + autofix_prs: true + autoupdate_branch: '' + autoupdate_commit_msg: '[pre-commit.ci] pre-commit autoupdate' + autoupdate_schedule: weekly + skip: [] + submodules: false diff --git a/INSTALL b/INSTALL index bdeb394..7002a16 100644 --- a/INSTALL +++ b/INSTALL @@ -1,7 +1,7 @@ To install: python setup.py build and -python setup.py install +python setup.py install To also install the optional LOFAR features (requires lofar.parmdb + pyrap): diff --git a/README.md b/README.md index 211df6f..fbbeb7b 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,13 @@ # RMextract -extract TEC, vTEC, Earthmagnetic field and Rotation Measures from GPS and WMM data for radio interferometry observations +extract TEC, vTEC, Earthmagnetic field and Rotation Measures from GPS and WMM data for radio interferometry observations Please cite as: Mevius, M. (2018) RMextract, Astrophysics Source Code Library, record [ascl:1806.024] -WMM model data: +WMM model data: NCEI Geomagnetic Modeling Team and British Geological Survey. 2019. World Magnetic Model 2020. NOAA National Centers for Environmental Information. doi: 10.25921/11v3-da71, 2020 IRI model: -D. Bilitza, IRI the International Standard for the Ionosphere, Adv. Radio Sci., 16, 1-11, https://doi.org/10.5194/ars-16-1-2018, 2018. +D. Bilitza, IRI the International Standard for the Ionosphere, Adv. Radio Sci., 16, 1-11, https://doi.org/10.5194/ars-16-1-2018, 2018. IRIPlas model: T. Gulyaeva and D. Bilitza, "Towards ISO standard earth ionosphere and plasmasphere model," in New Developments in the Standard Model R. Larsen, Ed. Hauppauge, New York: NOVA, 2012, pp. 1-48. diff --git a/RMextract/EMM/EMM.py b/RMextract/EMM/EMM.py index 3148f1b..41122eb 100644 --- a/RMextract/EMM/EMM.py +++ b/RMextract/EMM/EMM.py @@ -10,83 +10,111 @@ class WMM: - def __init__(self,cof=resource_filename(__name__,'WMM.COF'),date=2010.,lon=0.,lat=0.,h=0.): + def __init__( + self, + cof=resource_filename(__name__, "WMM.COF"), + date=2010.0, + lon=0.0, + lat=0.0, + h=0.0, + ): try: - cof=cof.replace("WMM.COF","") - if not os.path.isfile(cof+"WMM.COF"): - print ("initializing model failed. Did you specify correct location for coefficient files") + cof = cof.replace("WMM.COF", "") + if not os.path.isfile(cof + "WMM.COF"): + print( + "initializing model failed. Did you specify correct location for coefficient files" + ) return - self.WMM_Model=emm.WMM_Model(cof+"WMM",date,lon,lat,h) + self.WMM_Model = emm.WMM_Model(cof + "WMM", date, lon, lat, h) except (RuntimeError, TypeError, NameError): - print ("initializing mdoel failed. Did you specify correct location for coefficient files") - self.date=date - self.lon=lon - self.lat=lat - self.h=h - self.changed=False + print( + "initializing mdoel failed. Did you specify correct location for coefficient files" + ) + self.date = date + self.lon = lon + self.lat = lat + self.h = h + self.changed = False def getXYZ(self): - '''get BField, convert to (ITRF) X,Y,Z coordinates''' - N,E,D=self.getNED() - lat=radians(self.lat) - lon=radians(self.lon) - X=-1*cos(lat)*cos(lon)*D-sin(lat)*cos(lon)*N-sin(lon)*E - Y=-1*cos(lat)*sin(lon)*D-sin(lat)*sin(lon)*N+cos(lon)*E - Z=-1*sin(lat)*D+N*cos(lat) - return X,Y,Z + """get BField, convert to (ITRF) X,Y,Z coordinates""" + N, E, D = self.getNED() + lat = radians(self.lat) + lon = radians(self.lon) + X = -1 * cos(lat) * cos(lon) * D - sin(lat) * cos(lon) * N - sin(lon) * E + Y = -1 * cos(lat) * sin(lon) * D - sin(lat) * sin(lon) * N + cos(lon) * E + Z = -1 * sin(lat) * D + N * cos(lat) + return X, Y, Z def getNED(self): - #check if something has changed + # check if something has changed if self.WMM_Model.getDate() != self.date: - self.changed=True + self.changed = True self.WMM_Model.setDate(self.date) - if self.WMM_Model.getLon() != self.lon or self.WMM_Model.getLat() != self.lat : - self.changed=True - self.WMM_Model.setLonLat(self.lon,self.lat) + if self.WMM_Model.getLon() != self.lon or self.WMM_Model.getLat() != self.lat: + self.changed = True + self.WMM_Model.setLonLat(self.lon, self.lat) if self.WMM_Model.getHeight() != self.h: - self.changed=True + self.changed = True self.WMM_Model.setHeight(self.h) if self.changed: self.WMM_Model.setEM() - self.changed=False - - return self.WMM_Model.getX(),self.WMM_Model.getY(),self.WMM_Model.getZ() - #North, East,Down - - def getProjectedField(self,lon,lat): - '''get fieldstrength in direction lon,lat''' - x,y,z=self.getXYZ() - return sin(lat)*z+cos(lat)*cos(lon)*x +cos(lat)*sin(lon)*y + self.changed = False - def getProjectedFieldVector(self,lon,lat): - '''get field with one axis projected in direction lon,lat''' - x,y,z=self.getXYZ() - return [sin(lat)*z+cos(lat)*cos(lon)*x +cos(lat)*sin(lon)*y, - -1*sin(lon)*x +cos(lon)*y, - cos(lat)*z-sin(lat)*cos(lon)*x -sin(lat)*sin(lon)*y] + return self.WMM_Model.getX(), self.WMM_Model.getY(), self.WMM_Model.getZ() + # North, East,Down - def getProjectedFieldArray(self,lon_array,lat_array,h_array,los_dir): - '''returns numpy array with projected BField along LOS (given in lon,lat) for ray tracing''' - result=np.zeros((len(lon_array),3)) - - for idx,self.lon,self.lat,self.h in zip(range(len(lon_array)),lon_array,lat_array,h_array): - result[idx]=self.getProjectedFieldVector(los_dir[0],los_dir[1]) + def getProjectedField(self, lon, lat): + """get fieldstrength in direction lon,lat""" + x, y, z = self.getXYZ() + return sin(lat) * z + cos(lat) * cos(lon) * x + cos(lat) * sin(lon) * y + + def getProjectedFieldVector(self, lon, lat): + """get field with one axis projected in direction lon,lat""" + x, y, z = self.getXYZ() + return [ + sin(lat) * z + cos(lat) * cos(lon) * x + cos(lat) * sin(lon) * y, + -1 * sin(lon) * x + cos(lon) * y, + cos(lat) * z - sin(lat) * cos(lon) * x - sin(lat) * sin(lon) * y, + ] + + def getProjectedFieldArray(self, lon_array, lat_array, h_array, los_dir): + """returns numpy array with projected BField along LOS (given in lon,lat) for ray tracing""" + result = np.zeros((len(lon_array), 3)) + + for idx, self.lon, self.lat, self.h in zip( + range(len(lon_array)), lon_array, lat_array, h_array + ): + result[idx] = self.getProjectedFieldVector(los_dir[0], los_dir[1]) return result class EMM(WMM): - def __init__(self,cof=resource_filename(__name__,'EMM2000.COF'),date=2010.,lon=0.,lat=0.,h=0.): + def __init__( + self, + cof=resource_filename(__name__, "EMM2000.COF"), + date=2010.0, + lon=0.0, + lat=0.0, + h=0.0, + ): try: - cof=cof.replace("EMM2000.COF","") - if not os.path.isfile(cof+"EMM2000.COF"): - print ("initializing model",cof+"EMM2000.COF","failed. Did you specify correct location for coefficient files") + cof = cof.replace("EMM2000.COF", "") + if not os.path.isfile(cof + "EMM2000.COF"): + print( + "initializing model", + cof + "EMM2000.COF", + "failed. Did you specify correct location for coefficient files", + ) return - - self.WMM_Model=emm.EMM_Model(cof+"EMM",date,lon,lat,h) + + self.WMM_Model = emm.EMM_Model(cof + "EMM", date, lon, lat, h) except (RuntimeError, TypeError, NameError): - print ("initializing mdoel failed. Did you specify correct location for coefficient files") - self.date=date - self.lon=lon - self.lat=lat - self.h=h - self.changed=False + print( + "initializing mdoel failed. Did you specify correct location for coefficient files" + ) + self.date = date + self.lon = lon + self.lat = lat + self.h = h + self.changed = False diff --git a/RMextract/EMM/EMM2006.COF b/RMextract/EMM/EMM2006.COF index 502041f..38da2b0 100644 --- a/RMextract/EMM/EMM2006.COF +++ b/RMextract/EMM/EMM2006.COF @@ -133,4 +133,4 @@ 15 12 -0.0122 -0.3175 15 13 -0.1348 0.2017 15 14 0.1178 0.0045 - 15 15 -0.1924 -0.0323 \ No newline at end of file + 15 15 -0.1924 -0.0323 diff --git a/RMextract/EMM/EMM2007.COF b/RMextract/EMM/EMM2007.COF index b04a073..5b51caa 100644 --- a/RMextract/EMM/EMM2007.COF +++ b/RMextract/EMM/EMM2007.COF @@ -133,4 +133,4 @@ 15 12 -0.0258 -0.3018 15 13 -0.1043 0.1802 15 14 0.1248 0.0019 - 15 15 -0.2030 -0.0546 \ No newline at end of file + 15 15 -0.2030 -0.0546 diff --git a/RMextract/EMM/EMM2008.COF b/RMextract/EMM/EMM2008.COF index 2367fb6..ac37f1a 100644 --- a/RMextract/EMM/EMM2008.COF +++ b/RMextract/EMM/EMM2008.COF @@ -133,4 +133,4 @@ 15 12 -0.0319 -0.2968 15 13 -0.0867 0.1659 15 14 0.1288 -0.0080 - 15 15 -0.2127 -0.0613 \ No newline at end of file + 15 15 -0.2127 -0.0613 diff --git a/RMextract/EMM/EMM2009.COF b/RMextract/EMM/EMM2009.COF index dd9daa6..0a8872d 100644 --- a/RMextract/EMM/EMM2009.COF +++ b/RMextract/EMM/EMM2009.COF @@ -133,4 +133,4 @@ 15 12 -0.0357 -0.2965 15 13 -0.0793 0.1511 15 14 0.1344 -0.0122 - 15 15 -0.2360 -0.0622 \ No newline at end of file + 15 15 -0.2360 -0.0622 diff --git a/RMextract/EMM/EMM_Model.cc b/RMextract/EMM/EMM_Model.cc index d39d8c8..b0ce612 100644 --- a/RMextract/EMM/EMM_Model.cc +++ b/RMextract/EMM/EMM_Model.cc @@ -9,31 +9,31 @@ WMM_Model::~WMM_Model(){ MAG_FreeMagneticModelMemory(TimedMagneticModel); TimedMagneticModel=NULL; } - for(int i = 0; i < epochs + 1; i++) + for(int i = 0; i < epochs + 1; i++) if (MagneticModels[i]){ MAG_FreeMagneticModelMemory(MagneticModels[i]); MagneticModels[i]=NULL; } }; -WMM_Model::WMM_Model(){ +WMM_Model::WMM_Model(){ TimedMagneticModel=NULL; - - for(int i = 0; i < epochs + 1; i++) + + for(int i = 0; i < epochs + 1; i++) MagneticModels[i]=NULL; }; WMM_Model::WMM_Model(const char CoeffFile[256], const float date,const float lon,const float lat,const float h){ TimedMagneticModel=NULL; - - for(int i = 0; i < epochs + 1; i++) + + for(int i = 0; i < epochs + 1; i++) MagneticModels[i]=NULL; - + char filename[256]; char filenameSV[256]; - + sprintf(filename, "%s.COF", CoeffFile); - + FILE * filename_valid=fopen (filename, "r"); assert(filename_valid); fclose(filename_valid); @@ -65,13 +65,13 @@ void WMM_Model::setEM() void WMM_Model::setDate(const float date){ UserDate.DecimalYear=date; //decimal year - + } void WMM_Model::setLonLat(const float lon,const float lat){ CoordGeodetic.phi=lat;//lattitude in degrees CoordGeodetic.lambda=lon; //longitude in degrees - + } void WMM_Model::setHeight(const float h){ CoordGeodetic.HeightAboveEllipsoid=h; //Height above WGS-84 elipsoid @@ -93,16 +93,16 @@ float WMM_Model::getZ(){ EMM_Model::EMM_Model(const char CoeffFile[256], const float date,const float lon,const float lat,const float h){ TimedMagneticModel=NULL; - - for(int i = 0; i < epochs + 1; i++) + + for(int i = 0; i < epochs + 1; i++) MagneticModels[i]=NULL; char filename[256]; char filenameSV[256]; - + sprintf(filename, "%s%d.COF", CoeffFile,2010); sprintf(filenameSV, "%s%dSV.COF",CoeffFile,2010); //check if filename exists - + FILE * filename_valid=fopen (filename, "r"); assert(filename_valid); fclose(filename_valid); @@ -133,7 +133,7 @@ EMM_Model::EMM_Model(const char CoeffFile[256], const float date,const float lon nMax = MagneticModels[epochs]->nMax; NumTerms = ((nMax + 1) * (nMax + 2) / 2); TimedMagneticModel = MAG_AllocateModelMemory(NumTerms); /* For storing the time modified WMM Model parameters */ - for(int i = 0; i < epochs; i++) + for(int i = 0; i < epochs; i++) if(MagneticModels[i] == NULL || TimedMagneticModel == NULL) { MAG_Error(2); diff --git a/RMextract/EMM/EMM_Model.h b/RMextract/EMM/EMM_Model.h index 774766c..095a29c 100644 --- a/RMextract/EMM/EMM_Model.h +++ b/RMextract/EMM/EMM_Model.h @@ -15,7 +15,7 @@ extern "C"{ /* The Geomagnetism Library is used to make a command prompt program. The program prompts the user to enter a location, performs the computations and prints the results to the standard output. The program expects the files GeomagnetismLibrary.c, GeomagnetismHeader.h, -EMM2010.COF, EMM2010SV.COF and EGM9615.h to be in the same directory. +EMM2010.COF, EMM2010SV.COF and EGM9615.h to be in the same directory. Manoj.C.Nair Nov 23, 2009 diff --git a/RMextract/EMM/EMM_Model.py b/RMextract/EMM/EMM_Model.py index dcca3d4..7e0f04e 100644 --- a/RMextract/EMM/EMM_Model.py +++ b/RMextract/EMM/EMM_Model.py @@ -5,25 +5,30 @@ # the SWIG interface file instead. - from sys import version_info -if version_info >= (2,6,0): +if version_info >= (2, 6, 0): + def swig_import_helper(): import imp from os.path import dirname + fp = None try: - fp, pathname, description = imp.find_module('_EMM_Model', [dirname(__file__)]) + fp, pathname, description = imp.find_module( + "_EMM_Model", [dirname(__file__)] + ) except ImportError: import _EMM_Model + return _EMM_Model if fp is not None: try: - _mod = imp.load_module('_EMM_Model', fp, pathname, description) + _mod = imp.load_module("_EMM_Model", fp, pathname, description) finally: fp.close() return _mod + _EMM_Model = swig_import_helper() del swig_import_helper else: @@ -32,39 +37,58 @@ def swig_import_helper(): try: _swig_property = property except NameError: - pass # Python < 2.2 doesn't have 'property'. -def _swig_setattr_nondynamic(self,class_type,name,value,static=1): - if (name == "thisown"): return self.this.own(value) - if (name == "this"): - if type(value).__name__ == 'SwigPyObject': + pass # Python < 2.2 doesn't have 'property'. + + +def _swig_setattr_nondynamic(self, class_type, name, value, static=1): + if name == "thisown": + return self.this.own(value) + if name == "this": + if type(value).__name__ == "SwigPyObject": self.__dict__[name] = value return - method = class_type.__swig_setmethods__.get(name,None) - if method: return method(self,value) - if (not static): + method = class_type.__swig_setmethods__.get(name, None) + if method: + return method(self, value) + if not static: self.__dict__[name] = value else: raise AttributeError("You cannot add attributes to %s" % self) -def _swig_setattr(self,class_type,name,value): - return _swig_setattr_nondynamic(self,class_type,name,value,0) -def _swig_getattr(self,class_type,name): - if (name == "thisown"): return self.this.own() - method = class_type.__swig_getmethods__.get(name,None) - if method: return method(self) +def _swig_setattr(self, class_type, name, value): + return _swig_setattr_nondynamic(self, class_type, name, value, 0) + + +def _swig_getattr(self, class_type, name): + if name == "thisown": + return self.this.own() + method = class_type.__swig_getmethods__.get(name, None) + if method: + return method(self) raise AttributeError(name) + def _swig_repr(self): - try: strthis = "proxy of " + self.this.__repr__() - except: strthis = "" - return "<%s.%s; %s >" % (self.__class__.__module__, self.__class__.__name__, strthis,) + try: + strthis = "proxy of " + self.this.__repr__() + except: + strthis = "" + return "<%s.%s; %s >" % ( + self.__class__.__module__, + self.__class__.__name__, + strthis, + ) + try: _object = object _newclass = 1 except AttributeError: - class _object : pass + + class _object: + pass + _newclass = 0 @@ -75,76 +99,156 @@ class WMM_Model(_object): __getattr__ = lambda self, name: _swig_getattr(self, WMM_Model, name) __repr__ = _swig_repr __swig_destroy__ = _EMM_Model.delete_WMM_Model - __del__ = lambda self : None - def __init__(self, *args): + __del__ = lambda self: None + + def __init__(self, *args): this = _EMM_Model.new_WMM_Model(*args) - try: self.this.append(this) - except: self.this = this - def setEM(self): return _EMM_Model.WMM_Model_setEM(self) - def setDate(self, *args): return _EMM_Model.WMM_Model_setDate(self, *args) - def setLonLat(self, *args): return _EMM_Model.WMM_Model_setLonLat(self, *args) - def setHeight(self, *args): return _EMM_Model.WMM_Model_setHeight(self, *args) - def getX(self): return _EMM_Model.WMM_Model_getX(self) - def getY(self): return _EMM_Model.WMM_Model_getY(self) - def getZ(self): return _EMM_Model.WMM_Model_getZ(self) - def getdX(self): return _EMM_Model.WMM_Model_getdX(self) - def getdY(self): return _EMM_Model.WMM_Model_getdY(self) - def getdZ(self): return _EMM_Model.WMM_Model_getdZ(self) - def getDate(self): return _EMM_Model.WMM_Model_getDate(self) - def getLon(self): return _EMM_Model.WMM_Model_getLon(self) - def getLat(self): return _EMM_Model.WMM_Model_getLat(self) - def getHeight(self): return _EMM_Model.WMM_Model_getHeight(self) + try: + self.this.append(this) + except: + self.this = this + + def setEM(self): + return _EMM_Model.WMM_Model_setEM(self) + + def setDate(self, *args): + return _EMM_Model.WMM_Model_setDate(self, *args) + + def setLonLat(self, *args): + return _EMM_Model.WMM_Model_setLonLat(self, *args) + + def setHeight(self, *args): + return _EMM_Model.WMM_Model_setHeight(self, *args) + + def getX(self): + return _EMM_Model.WMM_Model_getX(self) + + def getY(self): + return _EMM_Model.WMM_Model_getY(self) + + def getZ(self): + return _EMM_Model.WMM_Model_getZ(self) + + def getdX(self): + return _EMM_Model.WMM_Model_getdX(self) + + def getdY(self): + return _EMM_Model.WMM_Model_getdY(self) + + def getdZ(self): + return _EMM_Model.WMM_Model_getdZ(self) + + def getDate(self): + return _EMM_Model.WMM_Model_getDate(self) + + def getLon(self): + return _EMM_Model.WMM_Model_getLon(self) + + def getLat(self): + return _EMM_Model.WMM_Model_getLat(self) + + def getHeight(self): + return _EMM_Model.WMM_Model_getHeight(self) + __swig_setmethods__["NumTerms"] = _EMM_Model.WMM_Model_NumTerms_set __swig_getmethods__["NumTerms"] = _EMM_Model.WMM_Model_NumTerms_get - if _newclass:NumTerms = _swig_property(_EMM_Model.WMM_Model_NumTerms_get, _EMM_Model.WMM_Model_NumTerms_set) + if _newclass: + NumTerms = _swig_property( + _EMM_Model.WMM_Model_NumTerms_get, _EMM_Model.WMM_Model_NumTerms_set + ) __swig_setmethods__["LoadedEpoch"] = _EMM_Model.WMM_Model_LoadedEpoch_set __swig_getmethods__["LoadedEpoch"] = _EMM_Model.WMM_Model_LoadedEpoch_get - if _newclass:LoadedEpoch = _swig_property(_EMM_Model.WMM_Model_LoadedEpoch_get, _EMM_Model.WMM_Model_LoadedEpoch_set) + if _newclass: + LoadedEpoch = _swig_property( + _EMM_Model.WMM_Model_LoadedEpoch_get, _EMM_Model.WMM_Model_LoadedEpoch_set + ) __swig_setmethods__["nMax"] = _EMM_Model.WMM_Model_nMax_set __swig_getmethods__["nMax"] = _EMM_Model.WMM_Model_nMax_get - if _newclass:nMax = _swig_property(_EMM_Model.WMM_Model_nMax_get, _EMM_Model.WMM_Model_nMax_set) + if _newclass: + nMax = _swig_property( + _EMM_Model.WMM_Model_nMax_get, _EMM_Model.WMM_Model_nMax_set + ) __swig_setmethods__["nMaxEMM"] = _EMM_Model.WMM_Model_nMaxEMM_set __swig_getmethods__["nMaxEMM"] = _EMM_Model.WMM_Model_nMaxEMM_get - if _newclass:nMaxEMM = _swig_property(_EMM_Model.WMM_Model_nMaxEMM_get, _EMM_Model.WMM_Model_nMaxEMM_set) + if _newclass: + nMaxEMM = _swig_property( + _EMM_Model.WMM_Model_nMaxEMM_get, _EMM_Model.WMM_Model_nMaxEMM_set + ) __swig_setmethods__["Ellip"] = _EMM_Model.WMM_Model_Ellip_set __swig_getmethods__["Ellip"] = _EMM_Model.WMM_Model_Ellip_get - if _newclass:Ellip = _swig_property(_EMM_Model.WMM_Model_Ellip_get, _EMM_Model.WMM_Model_Ellip_set) + if _newclass: + Ellip = _swig_property( + _EMM_Model.WMM_Model_Ellip_get, _EMM_Model.WMM_Model_Ellip_set + ) __swig_setmethods__["CoordSpherical"] = _EMM_Model.WMM_Model_CoordSpherical_set __swig_getmethods__["CoordSpherical"] = _EMM_Model.WMM_Model_CoordSpherical_get - if _newclass:CoordSpherical = _swig_property(_EMM_Model.WMM_Model_CoordSpherical_get, _EMM_Model.WMM_Model_CoordSpherical_set) + if _newclass: + CoordSpherical = _swig_property( + _EMM_Model.WMM_Model_CoordSpherical_get, + _EMM_Model.WMM_Model_CoordSpherical_set, + ) __swig_setmethods__["CoordGeodetic"] = _EMM_Model.WMM_Model_CoordGeodetic_set __swig_getmethods__["CoordGeodetic"] = _EMM_Model.WMM_Model_CoordGeodetic_get - if _newclass:CoordGeodetic = _swig_property(_EMM_Model.WMM_Model_CoordGeodetic_get, _EMM_Model.WMM_Model_CoordGeodetic_set) + if _newclass: + CoordGeodetic = _swig_property( + _EMM_Model.WMM_Model_CoordGeodetic_get, + _EMM_Model.WMM_Model_CoordGeodetic_set, + ) __swig_setmethods__["UserDate"] = _EMM_Model.WMM_Model_UserDate_set __swig_getmethods__["UserDate"] = _EMM_Model.WMM_Model_UserDate_get - if _newclass:UserDate = _swig_property(_EMM_Model.WMM_Model_UserDate_get, _EMM_Model.WMM_Model_UserDate_set) - __swig_setmethods__["GeoMagneticElements"] = _EMM_Model.WMM_Model_GeoMagneticElements_set - __swig_getmethods__["GeoMagneticElements"] = _EMM_Model.WMM_Model_GeoMagneticElements_get - if _newclass:GeoMagneticElements = _swig_property(_EMM_Model.WMM_Model_GeoMagneticElements_get, _EMM_Model.WMM_Model_GeoMagneticElements_set) + if _newclass: + UserDate = _swig_property( + _EMM_Model.WMM_Model_UserDate_get, _EMM_Model.WMM_Model_UserDate_set + ) + __swig_setmethods__["GeoMagneticElements"] = ( + _EMM_Model.WMM_Model_GeoMagneticElements_set + ) + __swig_getmethods__["GeoMagneticElements"] = ( + _EMM_Model.WMM_Model_GeoMagneticElements_get + ) + if _newclass: + GeoMagneticElements = _swig_property( + _EMM_Model.WMM_Model_GeoMagneticElements_get, + _EMM_Model.WMM_Model_GeoMagneticElements_set, + ) __swig_setmethods__["Geoid"] = _EMM_Model.WMM_Model_Geoid_set __swig_getmethods__["Geoid"] = _EMM_Model.WMM_Model_Geoid_get - if _newclass:Geoid = _swig_property(_EMM_Model.WMM_Model_Geoid_get, _EMM_Model.WMM_Model_Geoid_set) + if _newclass: + Geoid = _swig_property( + _EMM_Model.WMM_Model_Geoid_get, _EMM_Model.WMM_Model_Geoid_set + ) + + WMM_Model_swigregister = _EMM_Model.WMM_Model_swigregister WMM_Model_swigregister(WMM_Model) + class EMM_Model(WMM_Model): __swig_setmethods__ = {} - for _s in [WMM_Model]: __swig_setmethods__.update(getattr(_s,'__swig_setmethods__',{})) + for _s in [WMM_Model]: + __swig_setmethods__.update(getattr(_s, "__swig_setmethods__", {})) __setattr__ = lambda self, name, value: _swig_setattr(self, EMM_Model, name, value) __swig_getmethods__ = {} - for _s in [WMM_Model]: __swig_getmethods__.update(getattr(_s,'__swig_getmethods__',{})) + for _s in [WMM_Model]: + __swig_getmethods__.update(getattr(_s, "__swig_getmethods__", {})) __getattr__ = lambda self, name: _swig_getattr(self, EMM_Model, name) __repr__ = _swig_repr - def __init__(self, *args): + + def __init__(self, *args): this = _EMM_Model.new_EMM_Model(*args) - try: self.this.append(this) - except: self.this = this - def setEM(self): return _EMM_Model.EMM_Model_setEM(self) + try: + self.this.append(this) + except: + self.this = this + + def setEM(self): + return _EMM_Model.EMM_Model_setEM(self) + __swig_destroy__ = _EMM_Model.delete_EMM_Model - __del__ = lambda self : None + __del__ = lambda self: None + + EMM_Model_swigregister = _EMM_Model.EMM_Model_swigregister EMM_Model_swigregister(EMM_Model) # This file is compatible with both classic and new-style classes. - - diff --git a/RMextract/EMM/EMM_Model_wrap.cc b/RMextract/EMM/EMM_Model_wrap.cc index 1434403..f0f6c72 100644 --- a/RMextract/EMM/EMM_Model_wrap.cc +++ b/RMextract/EMM/EMM_Model_wrap.cc @@ -1,11 +1,11 @@ /* ---------------------------------------------------------------------------- * This file was automatically generated by SWIG (http://www.swig.org). * Version 2.0.4 - * - * This file is not intended to be easily readable and contains a number of + * + * This file is not intended to be easily readable and contains a number of * coding conventions designed to improve portability and efficiency. Do not make - * changes to this file unless you know what you are doing--modify the SWIG - * interface file instead. + * changes to this file unless you know what you are doing--modify the SWIG + * interface file instead. * ----------------------------------------------------------------------------- */ #define SWIGPYTHON @@ -66,28 +66,28 @@ template T SwigValueInit() { #ifndef SWIGUNUSED # if defined(__GNUC__) # if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) -# define SWIGUNUSED __attribute__ ((__unused__)) +# define SWIGUNUSED __attribute__ ((__unused__)) # else # define SWIGUNUSED # endif # elif defined(__ICC) -# define SWIGUNUSED __attribute__ ((__unused__)) +# define SWIGUNUSED __attribute__ ((__unused__)) # else -# define SWIGUNUSED +# define SWIGUNUSED # endif #endif #ifndef SWIG_MSC_UNSUPPRESS_4505 # if defined(_MSC_VER) # pragma warning(disable : 4505) /* unreferenced local function has been removed */ -# endif +# endif #endif #ifndef SWIGUNUSEDPARM # ifdef __cplusplus # define SWIGUNUSEDPARM(p) # else -# define SWIGUNUSEDPARM(p) p SWIGUNUSED +# define SWIGUNUSEDPARM(p) p SWIGUNUSED # endif #endif @@ -130,7 +130,7 @@ template T SwigValueInit() { # define SWIGSTDCALL __stdcall # else # define SWIGSTDCALL -# endif +# endif #endif /* Deal with Microsoft's attempt at deprecating C standard runtime functions */ @@ -172,7 +172,7 @@ template T SwigValueInit() { You can use the SWIGRUNTIME and SWIGRUNTIMEINLINE macros for creating a static or dynamic library from the SWIG runtime code. In 99.9% of the cases, SWIG just needs to declare them as 'static'. - + But only do this if strictly necessary, ie, if you have problems with your compiler or suchlike. */ @@ -198,16 +198,16 @@ template T SwigValueInit() { #define SWIG_POINTER_OWN 0x1 -/* +/* Flags/methods for returning states. - - The SWIG conversion methods, as ConvertPtr, return an integer + + The SWIG conversion methods, as ConvertPtr, return an integer that tells if the conversion was successful or not. And if not, an error code can be returned (see swigerrors.swg for the codes). - + Use the following macros/flags to set or process the returning states. - + In old versions of SWIG, code such as the following was usually written: if (SWIG_ConvertPtr(obj,vptr,ty.flags) != -1) { @@ -240,23 +240,23 @@ template T SwigValueInit() { } else { // fail code } - + I.e., now SWIG_ConvertPtr can return new objects and you can identify the case and take care of the deallocation. Of course that also requires SWIG_ConvertPtr to return new result values, such as - int SWIG_ConvertPtr(obj, ptr,...) { - if () { - if () { - *ptr = ; - return SWIG_NEWOBJ; - } else { - *ptr = ; - return SWIG_OLDOBJ; - } - } else { - return SWIG_BADOBJ; - } + int SWIG_ConvertPtr(obj, ptr,...) { + if () { + if () { + *ptr = ; + return SWIG_NEWOBJ; + } else { + *ptr = ; + return SWIG_OLDOBJ; + } + } else { + return SWIG_BADOBJ; + } } Of course, returning the plain '0(success)/-1(fail)' still works, but you can be @@ -270,17 +270,17 @@ template T SwigValueInit() { int fooi(int); and you call - + food(1) // cast rank '1' (1 -> 1.0) fooi(1) // cast rank '0' just use the SWIG_AddCast()/SWIG_CheckState() */ -#define SWIG_OK (0) +#define SWIG_OK (0) #define SWIG_ERROR (-1) #define SWIG_IsOK(r) (r >= 0) -#define SWIG_ArgError(r) ((r != SWIG_ERROR) ? r : SWIG_TypeError) +#define SWIG_ArgError(r) ((r != SWIG_ERROR) ? r : SWIG_TypeError) /* The CastRankLimit says how many bits are used for the cast rank */ #define SWIG_CASTRANKLIMIT (1 << 8) @@ -311,11 +311,11 @@ template T SwigValueInit() { # endif # define SWIG_CASTRANKMASK ((SWIG_CASTRANKLIMIT) -1) # define SWIG_CastRank(r) (r & SWIG_CASTRANKMASK) -SWIGINTERNINLINE int SWIG_AddCast(int r) { +SWIGINTERNINLINE int SWIG_AddCast(int r) { return SWIG_IsOK(r) ? ((SWIG_CastRank(r) < SWIG_MAXCASTRANK) ? (r + 1) : SWIG_ERROR) : r; } -SWIGINTERNINLINE int SWIG_CheckState(int r) { - return SWIG_IsOK(r) ? SWIG_CastRank(r) + 1 : 0; +SWIGINTERNINLINE int SWIG_CheckState(int r) { + return SWIG_IsOK(r) ? SWIG_CastRank(r) + 1 : 0; } #else /* no cast-rank mode */ # define SWIG_AddCast @@ -362,7 +362,7 @@ typedef struct swig_module_info { void *clientdata; /* Language specific module data */ } swig_module_info; -/* +/* Compare two type names skipping the space characters, therefore "char*" == "char *" and "Class" == "Class", etc. @@ -446,7 +446,7 @@ SWIG_TypeCheck(const char *c, swig_type_info *ty) { return 0; } -/* +/* Identical to SWIG_TypeCheck, except strcmp is replaced with a pointer comparison */ SWIGRUNTIME swig_cast_info * @@ -481,7 +481,7 @@ SWIG_TypeCast(swig_cast_info *ty, void *ptr, int *newmemory) { return ((!ty) || (!ty->converter)) ? ptr : (*ty->converter)(ptr, newmemory); } -/* +/* Dynamic pointer casting. Down an inheritance hierarchy */ SWIGRUNTIME swig_type_info * @@ -525,7 +525,7 @@ SWIG_TypePrettyName(const swig_type_info *type) { return type->name; } -/* +/* Set the clientdata field for a type */ SWIGRUNTIME void @@ -533,14 +533,14 @@ SWIG_TypeClientData(swig_type_info *ti, void *clientdata) { swig_cast_info *cast = ti->cast; /* if (ti->clientdata == clientdata) return; */ ti->clientdata = clientdata; - + while (cast) { if (!cast->converter) { swig_type_info *tc = cast->type; if (!tc->clientdata) { SWIG_TypeClientData(tc, clientdata); } - } + } cast = cast->next; } } @@ -549,18 +549,18 @@ SWIG_TypeNewClientData(swig_type_info *ti, void *clientdata) { SWIG_TypeClientData(ti, clientdata); ti->owndata = 1; } - + /* Search for a swig_type_info structure only by mangled name Search is a O(log #types) - - We start searching at module start, and finish searching when start == end. + + We start searching at module start, and finish searching when start == end. Note: if start == end at the beginning of the function, we go all the way around the circular list. */ SWIGRUNTIME swig_type_info * -SWIG_MangledTypeQueryModule(swig_module_info *start, - swig_module_info *end, +SWIG_MangledTypeQueryModule(swig_module_info *start, + swig_module_info *end, const char *name) { swig_module_info *iter = start; do { @@ -569,11 +569,11 @@ SWIG_MangledTypeQueryModule(swig_module_info *start, register size_t r = iter->size - 1; do { /* since l+r >= 0, we can (>> 1) instead (/ 2) */ - register size_t i = (l + r) >> 1; + register size_t i = (l + r) >> 1; const char *iname = iter->types[i]->name; if (iname) { register int compare = strcmp(name, iname); - if (compare == 0) { + if (compare == 0) { return iter->types[i]; } else if (compare < 0) { if (i) { @@ -598,14 +598,14 @@ SWIG_MangledTypeQueryModule(swig_module_info *start, Search for a swig_type_info structure for either a mangled name or a human readable name. It first searches the mangled names of the types, which is a O(log #types) If a type is not found it then searches the human readable names, which is O(#types). - - We start searching at module start, and finish searching when start == end. + + We start searching at module start, and finish searching when start == end. Note: if start == end at the beginning of the function, we go all the way around the circular list. */ SWIGRUNTIME swig_type_info * -SWIG_TypeQueryModule(swig_module_info *start, - swig_module_info *end, +SWIG_TypeQueryModule(swig_module_info *start, + swig_module_info *end, const char *name) { /* STEP 1: Search the name field using binary search */ swig_type_info *ret = SWIG_MangledTypeQueryModule(start, end, name); @@ -624,12 +624,12 @@ SWIG_TypeQueryModule(swig_module_info *start, iter = iter->next; } while (iter != end); } - + /* neither found a match */ return 0; } -/* +/* Pack binary data into a string */ SWIGRUNTIME char * @@ -645,7 +645,7 @@ SWIG_PackData(char *c, void *ptr, size_t sz) { return c; } -/* +/* Unpack binary data from a string */ SWIGRUNTIME const char * @@ -659,21 +659,21 @@ SWIG_UnpackData(const char *c, void *ptr, size_t sz) { uu = ((d - '0') << 4); else if ((d >= 'a') && (d <= 'f')) uu = ((d - ('a'-10)) << 4); - else + else return (char *) 0; d = *(c++); if ((d >= '0') && (d <= '9')) uu |= (d - '0'); else if ((d >= 'a') && (d <= 'f')) uu |= (d - ('a'-10)); - else + else return (char *) 0; *u = uu; } return c; } -/* +/* Pack 'void *' into a string buffer. */ SWIGRUNTIME char * @@ -733,18 +733,18 @@ SWIG_UnpackDataName(const char *c, void *ptr, size_t sz, const char *name) { #endif /* Errors in SWIG */ -#define SWIG_UnknownError -1 -#define SWIG_IOError -2 -#define SWIG_RuntimeError -3 -#define SWIG_IndexError -4 -#define SWIG_TypeError -5 -#define SWIG_DivisionByZero -6 -#define SWIG_OverflowError -7 -#define SWIG_SyntaxError -8 -#define SWIG_ValueError -9 +#define SWIG_UnknownError -1 +#define SWIG_IOError -2 +#define SWIG_RuntimeError -3 +#define SWIG_IndexError -4 +#define SWIG_TypeError -5 +#define SWIG_DivisionByZero -6 +#define SWIG_OverflowError -7 +#define SWIG_SyntaxError -8 +#define SWIG_ValueError -9 #define SWIG_SystemError -10 #define SWIG_AttributeError -11 -#define SWIG_MemoryError -12 +#define SWIG_MemoryError -12 #define SWIG_NullReferenceError -13 @@ -760,7 +760,7 @@ SWIG_UnpackDataName(const char *c, void *ptr, size_t sz, const char *name) { #define PyString_FromString(x) PyUnicode_FromString(x) #define PyString_Format(fmt, args) PyUnicode_Format(fmt, args) #define PyString_AsString(str) PyBytes_AsString(str) -#define PyString_Size(str) PyBytes_Size(str) +#define PyString_Size(str) PyBytes_Size(str) #define PyString_InternFromString(key) PyUnicode_InternFromString(key) #define Py_TPFLAGS_HAVE_CLASS Py_TPFLAGS_BASETYPE #define PyString_AS_STRING(x) PyUnicode_AS_STRING(x) @@ -805,7 +805,7 @@ SWIG_Python_str_AsChar(PyObject *str) #if PY_VERSION_HEX >= 0x03000000 # define SWIG_Python_str_DelForPy3(x) free( (void*) (x) ) #else -# define SWIG_Python_str_DelForPy3(x) +# define SWIG_Python_str_DelForPy3(x) #endif @@ -813,7 +813,7 @@ SWIGINTERN PyObject* SWIG_Python_str_FromChar(const char *c) { #if PY_VERSION_HEX >= 0x03000000 - return PyUnicode_FromString(c); + return PyUnicode_FromString(c); #else return PyString_FromString(c); #endif @@ -1047,7 +1047,7 @@ SWIG_Python_AddErrorMsg(const char* mesg) # endif # if defined(SWIG_PYTHON_USE_GIL) /* Use PyGILState threads calls */ # ifndef SWIG_PYTHON_INITIALIZE_THREADS -# define SWIG_PYTHON_INITIALIZE_THREADS PyEval_InitThreads() +# define SWIG_PYTHON_INITIALIZE_THREADS PyEval_InitThreads() # endif # ifdef __cplusplus /* C++ code */ class SWIG_Python_Thread_Block { @@ -1173,7 +1173,7 @@ SWIGRUNTIME PyObject* SWIG_PyInstanceMethod_New(PyObject *SWIGUNUSEDPARM(self), #define SWIG_InternalNewPointerObj(ptr, type, flags) SWIG_Python_NewPointerObj(NULL, ptr, type, flags) -#define SWIG_CheckImplicit(ty) SWIG_Python_CheckImplicit(ty) +#define SWIG_CheckImplicit(ty) SWIG_Python_CheckImplicit(ty) #define SWIG_AcquirePtr(ptr, src) SWIG_Python_AcquirePtr(ptr, src) #define swig_owntype int @@ -1200,26 +1200,26 @@ SWIGRUNTIME PyObject* SWIG_PyInstanceMethod_New(PyObject *SWIGUNUSEDPARM(self), #define SWIG_SetModule(clientdata, pointer) SWIG_Python_SetModule(pointer) #define SWIG_NewClientData(obj) SwigPyClientData_New(obj) -#define SWIG_SetErrorObj SWIG_Python_SetErrorObj -#define SWIG_SetErrorMsg SWIG_Python_SetErrorMsg -#define SWIG_ErrorType(code) SWIG_Python_ErrorType(code) -#define SWIG_Error(code, msg) SWIG_Python_SetErrorMsg(SWIG_ErrorType(code), msg) -#define SWIG_fail goto fail +#define SWIG_SetErrorObj SWIG_Python_SetErrorObj +#define SWIG_SetErrorMsg SWIG_Python_SetErrorMsg +#define SWIG_ErrorType(code) SWIG_Python_ErrorType(code) +#define SWIG_Error(code, msg) SWIG_Python_SetErrorMsg(SWIG_ErrorType(code), msg) +#define SWIG_fail goto fail /* Runtime API implementation */ /* Error manipulation */ -SWIGINTERN void +SWIGINTERN void SWIG_Python_SetErrorObj(PyObject *errtype, PyObject *obj) { - SWIG_PYTHON_THREAD_BEGIN_BLOCK; + SWIG_PYTHON_THREAD_BEGIN_BLOCK; PyErr_SetObject(errtype, obj); Py_DECREF(obj); SWIG_PYTHON_THREAD_END_BLOCK; } -SWIGINTERN void +SWIGINTERN void SWIG_Python_SetErrorMsg(PyObject *errtype, const char *msg) { SWIG_PYTHON_THREAD_BEGIN_BLOCK; PyErr_SetString(errtype, (char *) msg); @@ -1240,7 +1240,7 @@ SwigPyBuiltin_AddPublicSymbol(PyObject *seq, const char *key) { } SWIGINTERN void -SWIG_Python_SetConstant(PyObject *d, PyObject *public_interface, const char *name, PyObject *obj) { +SWIG_Python_SetConstant(PyObject *d, PyObject *public_interface, const char *name, PyObject *obj) { PyDict_SetItemString(d, (char *)name, obj); Py_DECREF(obj); if (public_interface) @@ -1250,9 +1250,9 @@ SWIG_Python_SetConstant(PyObject *d, PyObject *public_interface, const char *nam #else SWIGINTERN void -SWIG_Python_SetConstant(PyObject *d, const char *name, PyObject *obj) { +SWIG_Python_SetConstant(PyObject *d, const char *name, PyObject *obj) { PyDict_SetItemString(d, (char *)name, obj); - Py_DECREF(obj); + Py_DECREF(obj); } #endif @@ -1311,11 +1311,11 @@ SWIG_Python_UnpackTuple(PyObject *args, const char *name, Py_ssize_t min, Py_ssi if (!min && !max) { return 1; } else { - PyErr_Format(PyExc_TypeError, "%s expected %s%d arguments, got none", + PyErr_Format(PyExc_TypeError, "%s expected %s%d arguments, got none", name, (min == max ? "" : "at least "), (int)min); return 0; } - } + } if (!PyTuple_Check(args)) { if (min <= 1 && max >= 1) { register int i; @@ -1330,11 +1330,11 @@ SWIG_Python_UnpackTuple(PyObject *args, const char *name, Py_ssize_t min, Py_ssi } else { register Py_ssize_t l = PyTuple_GET_SIZE(args); if (l < min) { - PyErr_Format(PyExc_TypeError, "%s expected %s%d arguments, got %d", + PyErr_Format(PyExc_TypeError, "%s expected %s%d arguments, got %d", name, (min == max ? "" : "at least "), (int)min, (int)l); return 0; } else if (l > max) { - PyErr_Format(PyExc_TypeError, "%s expected %s%d arguments, got %d", + PyErr_Format(PyExc_TypeError, "%s expected %s%d arguments, got %d", name, (min == max ? "" : "at most "), (int)max, (int)l); return 0; } else { @@ -1346,7 +1346,7 @@ SWIG_Python_UnpackTuple(PyObject *args, const char *name, Py_ssize_t min, Py_ssi objs[l] = 0; } return i + 1; - } + } } } @@ -1398,14 +1398,14 @@ extern "C" { # undef Py_None # define Py_None SWIG_Py_None() # endif -SWIGRUNTIMEINLINE PyObject * +SWIGRUNTIMEINLINE PyObject * _SWIG_Py_None(void) { PyObject *none = Py_BuildValue((char*)""); Py_DECREF(none); return none; } -SWIGRUNTIME PyObject * +SWIGRUNTIME PyObject * SWIG_Py_None(void) { static PyObject *SWIG_STATIC_POINTER(none) = _SWIG_Py_None(); @@ -1415,7 +1415,7 @@ SWIG_Py_None(void) /* The python void return value */ -SWIGRUNTIMEINLINE PyObject * +SWIGRUNTIMEINLINE PyObject * SWIG_Py_Void(void) { PyObject *none = Py_None; @@ -1435,7 +1435,7 @@ typedef struct { PyTypeObject *pytype; } SwigPyClientData; -SWIGRUNTIMEINLINE int +SWIGRUNTIMEINLINE int SWIG_Python_CheckImplicit(swig_type_info *ty) { SwigPyClientData *data = (SwigPyClientData *)ty->clientdata; @@ -1450,7 +1450,7 @@ SWIG_Python_ExceptionType(swig_type_info *desc) { } -SWIGRUNTIME SwigPyClientData * +SWIGRUNTIME SwigPyClientData * SwigPyClientData_New(PyObject* obj) { if (!obj) { @@ -1504,7 +1504,7 @@ SwigPyClientData_New(PyObject* obj) } } -SWIGRUNTIME void +SWIGRUNTIME void SwigPyClientData_Del(SwigPyClientData *data) { Py_XDECREF(data->newraw); Py_XDECREF(data->newargs); @@ -1588,7 +1588,7 @@ SwigPyObject_repr(SwigPyObject *v, PyObject *args) PyString_ConcatAndDel(&repr,nrep); # endif } - return repr; + return repr; } SWIGRUNTIME int @@ -1601,13 +1601,13 @@ SwigPyObject_print(SwigPyObject *v, FILE *fp, int SWIGUNUSEDPARM(flags)) PyObject *repr = SwigPyObject_repr(v, NULL); #endif if (repr) { - str = SWIG_Python_str_AsChar(repr); + str = SWIG_Python_str_AsChar(repr); fputs(str, fp); SWIG_Python_str_DelForPy3(str); Py_DECREF(repr); - return 0; + return 0; } else { - return 1; + return 1; } } @@ -1637,7 +1637,7 @@ SwigPyObject_richcompare(SwigPyObject *v, SwigPyObject *w, int op) return Py_NotImplemented; } res = PyBool_FromLong( (SwigPyObject_compare(v, w)==0) == (op == Py_EQ) ? 1 : 0); - return res; + return res; } @@ -1701,19 +1701,19 @@ SwigPyObject_dealloc(PyObject *v) res = ((*meth)(mself, v)); } Py_XDECREF(res); - } + } #if !defined(SWIG_PYTHON_SILENT_MEMLEAK) else { const char *name = SWIG_TypePrettyName(ty); printf("swig/python detected a memory leak of type '%s', no destructor found.\n", (name ? name : "unknown")); } #endif - } + } Py_XDECREF(next); PyObject_DEL(v); } -SWIGRUNTIME PyObject* +SWIGRUNTIME PyObject* SwigPyObject_append(PyObject* v, PyObject* next) { SwigPyObject *sobj = (SwigPyObject *) v; @@ -1730,7 +1730,7 @@ SwigPyObject_append(PyObject* v, PyObject* next) return SWIG_Py_Void(); } -SWIGRUNTIME PyObject* +SWIGRUNTIME PyObject* #ifdef METH_NOARGS SwigPyObject_next(PyObject* v) #else @@ -1738,7 +1738,7 @@ SwigPyObject_next(PyObject* v, PyObject *SWIGUNUSEDPARM(args)) #endif { SwigPyObject *sobj = (SwigPyObject *) v; - if (sobj->next) { + if (sobj->next) { Py_INCREF(sobj->next); return sobj->next; } else { @@ -1777,11 +1777,11 @@ SwigPyObject_own(PyObject *v, PyObject *args) #if (PY_VERSION_HEX < 0x02020000) if (!PyArg_ParseTuple(args,(char *)"|O:own",&val)) #else - if (!PyArg_UnpackTuple(args, (char *)"own", 0, 1, &val)) + if (!PyArg_UnpackTuple(args, (char *)"own", 0, 1, &val)) #endif { return NULL; - } + } else { SwigPyObject *sobj = (SwigPyObject *)v; @@ -1800,7 +1800,7 @@ SwigPyObject_own(PyObject *v, PyObject *args) SwigPyObject_disown(v,args); } #endif - } + } return obj; } } @@ -1814,7 +1814,7 @@ swigobject_methods[] = { {(char *)"append", (PyCFunction)SwigPyObject_append, METH_O, (char *)"appends another 'this' object"}, {(char *)"next", (PyCFunction)SwigPyObject_next, METH_NOARGS, (char *)"returns the next 'this' object"}, {(char *)"__repr__",(PyCFunction)SwigPyObject_repr, METH_NOARGS, (char *)"returns object representation"}, - {0, 0, 0, 0} + {0, 0, 0, 0} }; #else static PyMethodDef @@ -1825,7 +1825,7 @@ swigobject_methods[] = { {(char *)"append", (PyCFunction)SwigPyObject_append, METH_VARARGS, (char *)"appends another 'this' object"}, {(char *)"next", (PyCFunction)SwigPyObject_next, METH_VARARGS, (char *)"returns the next 'this' object"}, {(char *)"__repr__",(PyCFunction)SwigPyObject_repr, METH_VARARGS, (char *)"returns object representation"}, - {0, 0, 0, 0} + {0, 0, 0, 0} }; #endif @@ -2002,16 +2002,16 @@ SWIGRUNTIME int SwigPyPacked_print(SwigPyPacked *v, FILE *fp, int SWIGUNUSEDPARM(flags)) { char result[SWIG_BUFFER_SIZE]; - fputs("pack, v->size, 0, sizeof(result))) { - fputs("at ", fp); - fputs(result, fp); + fputs("at ", fp); + fputs(result, fp); } - fputs(v->ty->name,fp); + fputs(v->ty->name,fp); fputs(">", fp); - return 0; + return 0; } - + SWIGRUNTIME PyObject * SwigPyPacked_repr(SwigPyPacked *v) { @@ -2020,7 +2020,7 @@ SwigPyPacked_repr(SwigPyPacked *v) return SWIG_Python_str_FromFormat("", result, v->ty->name); } else { return SWIG_Python_str_FromFormat("", v->ty->name); - } + } } SWIGRUNTIME PyObject * @@ -2031,7 +2031,7 @@ SwigPyPacked_str(SwigPyPacked *v) return SWIG_Python_str_FromFormat("%s%s", result, v->ty->name); } else { return SWIG_Python_str_FromChar(v->ty->name); - } + } } SWIGRUNTIME int @@ -2053,7 +2053,7 @@ SwigPyPacked_type(void) { SWIGRUNTIMEINLINE int SwigPyPacked_Check(PyObject *op) { - return ((op)->ob_type == SwigPyPacked_TypeOnce()) + return ((op)->ob_type == SwigPyPacked_TypeOnce()) || (strcmp((op)->ob_type->tp_name,"SwigPyPacked") == 0); } @@ -2209,11 +2209,11 @@ SWIG_This(void) /* TODO: I don't know how to implement the fast getset in Python 3 right now */ #if PY_VERSION_HEX>=0x03000000 -#define SWIG_PYTHON_SLOW_GETSET_THIS +#define SWIG_PYTHON_SLOW_GETSET_THIS #endif SWIGRUNTIME SwigPyObject * -SWIG_Python_GetSwigThis(PyObject *pyobj) +SWIG_Python_GetSwigThis(PyObject *pyobj) { PyObject *obj; @@ -2236,7 +2236,7 @@ SWIG_Python_GetSwigThis(PyObject *pyobj) #if (!defined(SWIG_PYTHON_SLOW_GETSET_THIS) && (PY_VERSION_HEX >= 0x02030000)) if (PyInstance_Check(pyobj)) { - obj = _PyInstance_Lookup(pyobj, SWIG_This()); + obj = _PyInstance_Lookup(pyobj, SWIG_This()); } else { PyObject **dictptr = _PyObject_GetDictPtr(pyobj); if (dictptr != NULL) { @@ -2269,7 +2269,7 @@ SWIG_Python_GetSwigThis(PyObject *pyobj) #endif if (obj && !SwigPyObject_Check(obj)) { /* a PyObject is called 'this', try to get the 'real this' - SwigPyObject from it */ + SwigPyObject from it */ return SWIG_Python_GetSwigThis(obj); } return (SwigPyObject *)obj; @@ -2375,7 +2375,7 @@ SWIG_Python_ConvertPtrAndOwn(PyObject *obj, void **ptr, swig_type_info *ty, int res = SWIG_AddCast(res); res = SWIG_AddNewMask(res); } else { - res = SWIG_AddCast(res); + res = SWIG_AddCast(res); } } } @@ -2396,13 +2396,13 @@ SWIG_Python_ConvertFunctionPtr(PyObject *obj, void **ptr, swig_type_info *ty) { return SWIG_ConvertPtr(obj, ptr, ty, 0); } else { void *vptr = 0; - + /* here we get the method pointer for callbacks */ const char *doc = (((PyCFunctionObject *)obj) -> m_ml -> ml_doc); const char *desc = doc ? strstr(doc, "swig_ptr: ") : 0; if (desc) desc = ty ? SWIG_UnpackVoidPtr(desc + 10, &vptr, ty->name) : 0; - if (!desc) + if (!desc) return SWIG_ERROR; if (ty) { swig_cast_info *tc = SWIG_TypeCheck(desc,ty); @@ -2434,7 +2434,7 @@ SWIG_Python_ConvertPacked(PyObject *obj, void *ptr, size_t sz, swig_type_info *t } } return SWIG_OK; -} +} /* ----------------------------------------------------------------------------- * Create a new pointer object @@ -2445,7 +2445,7 @@ SWIG_Python_ConvertPacked(PyObject *obj, void *ptr, size_t sz, swig_type_info *t 'this' attribute. */ -SWIGRUNTIME PyObject* +SWIGRUNTIME PyObject* SWIG_Python_NewShadowInstance(SwigPyClientData *data, PyObject *swig_this) { #if (PY_VERSION_HEX >= 0x02020000) @@ -2533,7 +2533,7 @@ SWIG_Python_SetSwigThis(PyObject *inst, PyObject *swig_this) dict = PyObject_GetAttrString(inst, (char*)"__dict__"); PyDict_SetItem(dict, SWIG_This(), swig_this); Py_DECREF(dict); -} +} SWIGINTERN PyObject * @@ -2613,7 +2613,7 @@ SWIG_Python_NewPackedObj(void *ptr, size_t sz, swig_type_info *type) { } /* -----------------------------------------------------------------------------* - * Get type list + * Get type list * -----------------------------------------------------------------------------*/ #ifdef SWIG_LINK_RUNTIME @@ -2660,7 +2660,7 @@ PyModule_AddObject(PyObject *m, char *name, PyObject *o) "PyModule_AddObject() needs non-NULL value"); return SWIG_ERROR; } - + dict = PyModule_GetDict(m); if (dict == NULL) { /* Internal error -- modules must have a dict! */ @@ -2737,7 +2737,7 @@ SWIGRUNTIME swig_type_info * SWIG_Python_TypeQuery(const char *type) { PyObject *cache = SWIG_Python_TypeCache(); - PyObject *key = SWIG_Python_str_FromChar(type); + PyObject *key = SWIG_Python_str_FromChar(type); PyObject *obj = PyDict_GetItem(cache, key); swig_type_info *descriptor; if (obj) { @@ -2763,7 +2763,7 @@ SWIG_Python_TypeQuery(const char *type) return descriptor; } -/* +/* For backward compatibility only */ #define SWIG_POINTER_EXCEPTION 0 @@ -2772,7 +2772,7 @@ SWIG_Python_TypeQuery(const char *type) SWIGRUNTIME int SWIG_Python_AddErrMesg(const char* mesg, int infront) -{ +{ if (PyErr_Occurred()) { PyObject *type = 0; PyObject *value = 0; @@ -2796,7 +2796,7 @@ SWIG_Python_AddErrMesg(const char* mesg, int infront) return 0; } } - + SWIGRUNTIME int SWIG_Python_ArgFail(int argnum) { @@ -2830,10 +2830,10 @@ SWIG_Python_TypeError(const char *type, PyObject *obj) type, otype); return; } - } else -#endif + } else +#endif { - const char *otype = (obj ? obj->ob_type->tp_name : 0); + const char *otype = (obj ? obj->ob_type->tp_name : 0); if (otype) { PyObject *str = PyObject_Str(obj); const char *cstr = str ? SWIG_Python_str_AsChar(str) : 0; @@ -2848,7 +2848,7 @@ SWIG_Python_TypeError(const char *type, PyObject *obj) Py_XDECREF(str); return; } - } + } PyErr_Format(PyExc_TypeError, "a '%s' is expected", type); } else { PyErr_Format(PyExc_TypeError, "unexpected type is received"); @@ -2918,7 +2918,7 @@ SWIG_Python_NonDynamicSetAttr(PyObject *obj, PyObject *name, PyObject *value) { } else { res = f(descr, obj, value); } - + done: Py_DECREF(name); return res; @@ -2931,9 +2931,9 @@ SWIG_Python_NonDynamicSetAttr(PyObject *obj, PyObject *name, PyObject *value) { -#define SWIG_exception_fail(code, msg) do { SWIG_Error(code, msg); SWIG_fail; } while(0) +#define SWIG_exception_fail(code, msg) do { SWIG_Error(code, msg); SWIG_fail; } while(0) -#define SWIG_contract_assert(expr, msg) if (!(expr)) { SWIG_Error(SWIG_RuntimeError, msg); SWIG_fail; } else +#define SWIG_contract_assert(expr, msg) if (!(expr)) { SWIG_Error(SWIG_RuntimeError, msg); SWIG_fail; } else @@ -2973,12 +2973,12 @@ static swig_module_info swig_module = {swig_types, 9, 0, 0, 0, 0}; #endif #define SWIG_name "_EMM_Model" -#define SWIGVERSION 0x020004 +#define SWIGVERSION 0x020004 #define SWIG_VERSION SWIGVERSION -#define SWIG_as_voidptr(a) const_cast< void * >(static_cast< const void * >(a)) -#define SWIG_as_voidptrptr(a) ((void)SWIG_as_voidptr(*a),reinterpret_cast< void** >(a)) +#define SWIG_as_voidptr(a) const_cast< void * >(static_cast< const void * >(a)) +#define SWIG_as_voidptrptr(a) ((void)SWIG_as_voidptr(*a),reinterpret_cast< void** >(a)) #include @@ -2996,29 +2996,29 @@ namespace swig { SwigPtr_PyObject(const SwigPtr_PyObject& item) : _obj(item._obj) { - Py_XINCREF(_obj); + Py_XINCREF(_obj); } - + SwigPtr_PyObject(PyObject *obj, bool initial_ref = true) :_obj(obj) { if (initial_ref) { Py_XINCREF(_obj); } } - - SwigPtr_PyObject & operator=(const SwigPtr_PyObject& item) + + SwigPtr_PyObject & operator=(const SwigPtr_PyObject& item) { Py_XINCREF(item._obj); Py_XDECREF(_obj); _obj = item._obj; - return *this; + return *this; } - - ~SwigPtr_PyObject() + + ~SwigPtr_PyObject() { Py_XDECREF(_obj); } - + operator PyObject *() const { return _obj; @@ -3035,12 +3035,12 @@ namespace swig { namespace swig { struct SwigVar_PyObject : SwigPtr_PyObject { SwigVar_PyObject(PyObject* obj = 0) : SwigPtr_PyObject(obj, false) { } - + SwigVar_PyObject & operator = (PyObject* obj) { Py_XDECREF(_obj); _obj = obj; - return *this; + return *this; } }; } @@ -3067,7 +3067,7 @@ SWIG_AsCharPtrAndSize(PyObject *obj, char** cptr, size_t* psize, int *alloc) { #if PY_VERSION_HEX>=0x03000000 if (PyUnicode_Check(obj)) -#else +#else if (PyString_Check(obj)) #endif { @@ -3088,7 +3088,7 @@ SWIG_AsCharPtrAndSize(PyObject *obj, char** cptr, size_t* psize, int *alloc) #endif if (cptr) { if (alloc) { - /* + /* In python the user should not be able to modify the inner string representation. To warranty that, if you define SWIG_PYTHON_SAFE_CSTRINGS, a new/copy of the python string @@ -3096,11 +3096,11 @@ SWIG_AsCharPtrAndSize(PyObject *obj, char** cptr, size_t* psize, int *alloc) The default behavior is just to return the pointer value, so, be careful. - */ + */ #if defined(SWIG_PYTHON_SAFE_CSTRINGS) - if (*alloc != SWIG_OLDOBJ) + if (*alloc != SWIG_OLDOBJ) #else - if (*alloc == SWIG_NEWOBJ) + if (*alloc == SWIG_NEWOBJ) #endif { *cptr = reinterpret_cast< char* >(memcpy((new char[len + 1]), cstr, sizeof(char)*(len + 1))); @@ -3140,7 +3140,7 @@ SWIG_AsCharPtrAndSize(PyObject *obj, char** cptr, size_t* psize, int *alloc) SWIGINTERN int SWIG_AsCharArray(PyObject * obj, char *val, size_t size) -{ +{ char* cptr = 0; size_t csize = 0; int alloc = SWIG_OLDOBJ; int res = SWIG_AsCharPtrAndSize(obj, &cptr, &csize, &alloc); if (SWIG_IsOK(res)) { @@ -3153,7 +3153,7 @@ SWIG_AsCharArray(PyObject * obj, char *val, size_t size) if (alloc == SWIG_NEWOBJ) { delete[] cptr; res = SWIG_DelNewMask(res); - } + } return res; } if (alloc == SWIG_NEWOBJ) delete[] cptr; @@ -3220,17 +3220,17 @@ SWIG_AsVal_float (PyObject * obj, float *val) } else { if (val) *val = static_cast< float >(v); } - } + } return res; } - #define SWIG_From_double PyFloat_FromDouble + #define SWIG_From_double PyFloat_FromDouble SWIGINTERNINLINE PyObject * SWIG_From_float (float value) -{ +{ return SWIG_From_double (value); } @@ -3328,17 +3328,17 @@ SWIG_AsVal_int (PyObject * obj, int *val) } else { if (val) *val = static_cast< int >(v); } - } + } return res; } - #define SWIG_From_long PyInt_FromLong + #define SWIG_From_long PyInt_FromLong SWIGINTERNINLINE PyObject * SWIG_From_int (int value) -{ +{ return SWIG_From_long (value); } @@ -3351,11 +3351,11 @@ SWIGINTERN PyObject *_wrap_delete_WMM_Model(PyObject *SWIGUNUSEDPARM(self), PyOb void *argp1 = 0 ; int res1 = 0 ; PyObject * obj0 = 0 ; - + if (!PyArg_ParseTuple(args,(char *)"O:delete_WMM_Model",&obj0)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_WMM_Model, SWIG_POINTER_DISOWN | 0 ); if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_WMM_Model" "', argument " "1"" of type '" "WMM_Model *""'"); + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_WMM_Model" "', argument " "1"" of type '" "WMM_Model *""'"); } arg1 = reinterpret_cast< WMM_Model * >(argp1); delete arg1; @@ -3369,7 +3369,7 @@ SWIGINTERN PyObject *_wrap_delete_WMM_Model(PyObject *SWIGUNUSEDPARM(self), PyOb SWIGINTERN PyObject *_wrap_new_WMM_Model__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; WMM_Model *result = 0 ; - + if (!PyArg_ParseTuple(args,(char *)":new_WMM_Model")) SWIG_fail; result = (WMM_Model *)new WMM_Model(); resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_WMM_Model, SWIG_POINTER_NEW | 0 ); @@ -3402,7 +3402,7 @@ SWIGINTERN PyObject *_wrap_new_WMM_Model__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject * obj3 = 0 ; PyObject * obj4 = 0 ; WMM_Model *result = 0 ; - + if (!PyArg_ParseTuple(args,(char *)"OOOOO:new_WMM_Model",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail; res1 = SWIG_AsCharArray(obj0, temp1, 256); if (!SWIG_IsOK(res1)) { @@ -3412,22 +3412,22 @@ SWIGINTERN PyObject *_wrap_new_WMM_Model__SWIG_1(PyObject *SWIGUNUSEDPARM(self), ecode2 = SWIG_AsVal_float(obj1, &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_WMM_Model" "', argument " "2"" of type '" "float""'"); - } + } arg2 = static_cast< float >(val2); ecode3 = SWIG_AsVal_float(obj2, &val3); if (!SWIG_IsOK(ecode3)) { SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_WMM_Model" "', argument " "3"" of type '" "float""'"); - } + } arg3 = static_cast< float >(val3); ecode4 = SWIG_AsVal_float(obj3, &val4); if (!SWIG_IsOK(ecode4)) { SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "new_WMM_Model" "', argument " "4"" of type '" "float""'"); - } + } arg4 = static_cast< float >(val4); ecode5 = SWIG_AsVal_float(obj4, &val5); if (!SWIG_IsOK(ecode5)) { SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "new_WMM_Model" "', argument " "5"" of type '" "float""'"); - } + } arg5 = static_cast< float >(val5); result = (WMM_Model *)new WMM_Model((char const (*))arg1,arg2,arg3,arg4,arg5); resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_WMM_Model, SWIG_POINTER_NEW | 0 ); @@ -3456,7 +3456,7 @@ SWIGINTERN PyObject *_wrap_new_WMM_Model__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject * obj2 = 0 ; PyObject * obj3 = 0 ; WMM_Model *result = 0 ; - + if (!PyArg_ParseTuple(args,(char *)"OOOO:new_WMM_Model",&obj0,&obj1,&obj2,&obj3)) SWIG_fail; res1 = SWIG_AsCharArray(obj0, temp1, 256); if (!SWIG_IsOK(res1)) { @@ -3466,17 +3466,17 @@ SWIGINTERN PyObject *_wrap_new_WMM_Model__SWIG_2(PyObject *SWIGUNUSEDPARM(self), ecode2 = SWIG_AsVal_float(obj1, &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_WMM_Model" "', argument " "2"" of type '" "float""'"); - } + } arg2 = static_cast< float >(val2); ecode3 = SWIG_AsVal_float(obj2, &val3); if (!SWIG_IsOK(ecode3)) { SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_WMM_Model" "', argument " "3"" of type '" "float""'"); - } + } arg3 = static_cast< float >(val3); ecode4 = SWIG_AsVal_float(obj3, &val4); if (!SWIG_IsOK(ecode4)) { SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "new_WMM_Model" "', argument " "4"" of type '" "float""'"); - } + } arg4 = static_cast< float >(val4); result = (WMM_Model *)new WMM_Model((char const (*))arg1,arg2,arg3,arg4); resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_WMM_Model, SWIG_POINTER_NEW | 0 ); @@ -3501,7 +3501,7 @@ SWIGINTERN PyObject *_wrap_new_WMM_Model__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject * obj1 = 0 ; PyObject * obj2 = 0 ; WMM_Model *result = 0 ; - + if (!PyArg_ParseTuple(args,(char *)"OOO:new_WMM_Model",&obj0,&obj1,&obj2)) SWIG_fail; res1 = SWIG_AsCharArray(obj0, temp1, 256); if (!SWIG_IsOK(res1)) { @@ -3511,12 +3511,12 @@ SWIGINTERN PyObject *_wrap_new_WMM_Model__SWIG_3(PyObject *SWIGUNUSEDPARM(self), ecode2 = SWIG_AsVal_float(obj1, &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_WMM_Model" "', argument " "2"" of type '" "float""'"); - } + } arg2 = static_cast< float >(val2); ecode3 = SWIG_AsVal_float(obj2, &val3); if (!SWIG_IsOK(ecode3)) { SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_WMM_Model" "', argument " "3"" of type '" "float""'"); - } + } arg3 = static_cast< float >(val3); result = (WMM_Model *)new WMM_Model((char const (*))arg1,arg2,arg3); resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_WMM_Model, SWIG_POINTER_NEW | 0 ); @@ -3537,7 +3537,7 @@ SWIGINTERN PyObject *_wrap_new_WMM_Model__SWIG_4(PyObject *SWIGUNUSEDPARM(self), PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; WMM_Model *result = 0 ; - + if (!PyArg_ParseTuple(args,(char *)"OO:new_WMM_Model",&obj0,&obj1)) SWIG_fail; res1 = SWIG_AsCharArray(obj0, temp1, 256); if (!SWIG_IsOK(res1)) { @@ -3547,7 +3547,7 @@ SWIGINTERN PyObject *_wrap_new_WMM_Model__SWIG_4(PyObject *SWIGUNUSEDPARM(self), ecode2 = SWIG_AsVal_float(obj1, &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_WMM_Model" "', argument " "2"" of type '" "float""'"); - } + } arg2 = static_cast< float >(val2); result = (WMM_Model *)new WMM_Model((char const (*))arg1,arg2); resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_WMM_Model, SWIG_POINTER_NEW | 0 ); @@ -3564,7 +3564,7 @@ SWIGINTERN PyObject *_wrap_new_WMM_Model__SWIG_5(PyObject *SWIGUNUSEDPARM(self), int res1 ; PyObject * obj0 = 0 ; WMM_Model *result = 0 ; - + if (!PyArg_ParseTuple(args,(char *)"O:new_WMM_Model",&obj0)) SWIG_fail; res1 = SWIG_AsCharArray(obj0, temp1, 256); if (!SWIG_IsOK(res1)) { @@ -3583,7 +3583,7 @@ SWIGINTERN PyObject *_wrap_new_WMM_Model(PyObject *self, PyObject *args) { int argc; PyObject *argv[6]; int ii; - + if (!PyTuple_Check(args)) SWIG_fail; argc = args ? (int)PyObject_Length(args) : 0; for (ii = 0; (ii < 5) && (ii < argc); ii++) { @@ -3692,7 +3692,7 @@ SWIGINTERN PyObject *_wrap_new_WMM_Model(PyObject *self, PyObject *args) { } } } - + fail: SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'new_WMM_Model'.\n" " Possible C/C++ prototypes are:\n" @@ -3712,11 +3712,11 @@ SWIGINTERN PyObject *_wrap_WMM_Model_setEM(PyObject *SWIGUNUSEDPARM(self), PyObj void *argp1 = 0 ; int res1 = 0 ; PyObject * obj0 = 0 ; - + if (!PyArg_ParseTuple(args,(char *)"O:WMM_Model_setEM",&obj0)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_WMM_Model, 0 | 0 ); if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "WMM_Model_setEM" "', argument " "1"" of type '" "WMM_Model *""'"); + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "WMM_Model_setEM" "', argument " "1"" of type '" "WMM_Model *""'"); } arg1 = reinterpret_cast< WMM_Model * >(argp1); (arg1)->setEM(); @@ -3737,17 +3737,17 @@ SWIGINTERN PyObject *_wrap_WMM_Model_setDate(PyObject *SWIGUNUSEDPARM(self), PyO int ecode2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; - + if (!PyArg_ParseTuple(args,(char *)"OO:WMM_Model_setDate",&obj0,&obj1)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_WMM_Model, 0 | 0 ); if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "WMM_Model_setDate" "', argument " "1"" of type '" "WMM_Model *""'"); + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "WMM_Model_setDate" "', argument " "1"" of type '" "WMM_Model *""'"); } arg1 = reinterpret_cast< WMM_Model * >(argp1); ecode2 = SWIG_AsVal_float(obj1, &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "WMM_Model_setDate" "', argument " "2"" of type '" "float""'"); - } + } arg2 = static_cast< float >(val2); (arg1)->setDate(arg2); resultobj = SWIG_Py_Void(); @@ -3771,22 +3771,22 @@ SWIGINTERN PyObject *_wrap_WMM_Model_setLonLat(PyObject *SWIGUNUSEDPARM(self), P PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; PyObject * obj2 = 0 ; - + if (!PyArg_ParseTuple(args,(char *)"OOO:WMM_Model_setLonLat",&obj0,&obj1,&obj2)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_WMM_Model, 0 | 0 ); if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "WMM_Model_setLonLat" "', argument " "1"" of type '" "WMM_Model *""'"); + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "WMM_Model_setLonLat" "', argument " "1"" of type '" "WMM_Model *""'"); } arg1 = reinterpret_cast< WMM_Model * >(argp1); ecode2 = SWIG_AsVal_float(obj1, &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "WMM_Model_setLonLat" "', argument " "2"" of type '" "float""'"); - } + } arg2 = static_cast< float >(val2); ecode3 = SWIG_AsVal_float(obj2, &val3); if (!SWIG_IsOK(ecode3)) { SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "WMM_Model_setLonLat" "', argument " "3"" of type '" "float""'"); - } + } arg3 = static_cast< float >(val3); (arg1)->setLonLat(arg2,arg3); resultobj = SWIG_Py_Void(); @@ -3806,17 +3806,17 @@ SWIGINTERN PyObject *_wrap_WMM_Model_setHeight(PyObject *SWIGUNUSEDPARM(self), P int ecode2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; - + if (!PyArg_ParseTuple(args,(char *)"OO:WMM_Model_setHeight",&obj0,&obj1)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_WMM_Model, 0 | 0 ); if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "WMM_Model_setHeight" "', argument " "1"" of type '" "WMM_Model *""'"); + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "WMM_Model_setHeight" "', argument " "1"" of type '" "WMM_Model *""'"); } arg1 = reinterpret_cast< WMM_Model * >(argp1); ecode2 = SWIG_AsVal_float(obj1, &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "WMM_Model_setHeight" "', argument " "2"" of type '" "float""'"); - } + } arg2 = static_cast< float >(val2); (arg1)->setHeight(arg2); resultobj = SWIG_Py_Void(); @@ -3833,11 +3833,11 @@ SWIGINTERN PyObject *_wrap_WMM_Model_getX(PyObject *SWIGUNUSEDPARM(self), PyObje int res1 = 0 ; PyObject * obj0 = 0 ; float result; - + if (!PyArg_ParseTuple(args,(char *)"O:WMM_Model_getX",&obj0)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_WMM_Model, 0 | 0 ); if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "WMM_Model_getX" "', argument " "1"" of type '" "WMM_Model *""'"); + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "WMM_Model_getX" "', argument " "1"" of type '" "WMM_Model *""'"); } arg1 = reinterpret_cast< WMM_Model * >(argp1); result = (float)(arg1)->getX(); @@ -3855,11 +3855,11 @@ SWIGINTERN PyObject *_wrap_WMM_Model_getY(PyObject *SWIGUNUSEDPARM(self), PyObje int res1 = 0 ; PyObject * obj0 = 0 ; float result; - + if (!PyArg_ParseTuple(args,(char *)"O:WMM_Model_getY",&obj0)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_WMM_Model, 0 | 0 ); if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "WMM_Model_getY" "', argument " "1"" of type '" "WMM_Model *""'"); + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "WMM_Model_getY" "', argument " "1"" of type '" "WMM_Model *""'"); } arg1 = reinterpret_cast< WMM_Model * >(argp1); result = (float)(arg1)->getY(); @@ -3877,11 +3877,11 @@ SWIGINTERN PyObject *_wrap_WMM_Model_getZ(PyObject *SWIGUNUSEDPARM(self), PyObje int res1 = 0 ; PyObject * obj0 = 0 ; float result; - + if (!PyArg_ParseTuple(args,(char *)"O:WMM_Model_getZ",&obj0)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_WMM_Model, 0 | 0 ); if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "WMM_Model_getZ" "', argument " "1"" of type '" "WMM_Model *""'"); + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "WMM_Model_getZ" "', argument " "1"" of type '" "WMM_Model *""'"); } arg1 = reinterpret_cast< WMM_Model * >(argp1); result = (float)(arg1)->getZ(); @@ -3899,11 +3899,11 @@ SWIGINTERN PyObject *_wrap_WMM_Model_getdX(PyObject *SWIGUNUSEDPARM(self), PyObj int res1 = 0 ; PyObject * obj0 = 0 ; float result; - + if (!PyArg_ParseTuple(args,(char *)"O:WMM_Model_getdX",&obj0)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_WMM_Model, 0 | 0 ); if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "WMM_Model_getdX" "', argument " "1"" of type '" "WMM_Model *""'"); + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "WMM_Model_getdX" "', argument " "1"" of type '" "WMM_Model *""'"); } arg1 = reinterpret_cast< WMM_Model * >(argp1); result = (float)(arg1)->getdX(); @@ -3921,11 +3921,11 @@ SWIGINTERN PyObject *_wrap_WMM_Model_getdY(PyObject *SWIGUNUSEDPARM(self), PyObj int res1 = 0 ; PyObject * obj0 = 0 ; float result; - + if (!PyArg_ParseTuple(args,(char *)"O:WMM_Model_getdY",&obj0)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_WMM_Model, 0 | 0 ); if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "WMM_Model_getdY" "', argument " "1"" of type '" "WMM_Model *""'"); + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "WMM_Model_getdY" "', argument " "1"" of type '" "WMM_Model *""'"); } arg1 = reinterpret_cast< WMM_Model * >(argp1); result = (float)(arg1)->getdY(); @@ -3943,11 +3943,11 @@ SWIGINTERN PyObject *_wrap_WMM_Model_getdZ(PyObject *SWIGUNUSEDPARM(self), PyObj int res1 = 0 ; PyObject * obj0 = 0 ; float result; - + if (!PyArg_ParseTuple(args,(char *)"O:WMM_Model_getdZ",&obj0)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_WMM_Model, 0 | 0 ); if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "WMM_Model_getdZ" "', argument " "1"" of type '" "WMM_Model *""'"); + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "WMM_Model_getdZ" "', argument " "1"" of type '" "WMM_Model *""'"); } arg1 = reinterpret_cast< WMM_Model * >(argp1); result = (float)(arg1)->getdZ(); @@ -3965,11 +3965,11 @@ SWIGINTERN PyObject *_wrap_WMM_Model_getDate(PyObject *SWIGUNUSEDPARM(self), PyO int res1 = 0 ; PyObject * obj0 = 0 ; float result; - + if (!PyArg_ParseTuple(args,(char *)"O:WMM_Model_getDate",&obj0)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_WMM_Model, 0 | 0 ); if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "WMM_Model_getDate" "', argument " "1"" of type '" "WMM_Model *""'"); + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "WMM_Model_getDate" "', argument " "1"" of type '" "WMM_Model *""'"); } arg1 = reinterpret_cast< WMM_Model * >(argp1); result = (float)(arg1)->getDate(); @@ -3987,11 +3987,11 @@ SWIGINTERN PyObject *_wrap_WMM_Model_getLon(PyObject *SWIGUNUSEDPARM(self), PyOb int res1 = 0 ; PyObject * obj0 = 0 ; float result; - + if (!PyArg_ParseTuple(args,(char *)"O:WMM_Model_getLon",&obj0)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_WMM_Model, 0 | 0 ); if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "WMM_Model_getLon" "', argument " "1"" of type '" "WMM_Model *""'"); + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "WMM_Model_getLon" "', argument " "1"" of type '" "WMM_Model *""'"); } arg1 = reinterpret_cast< WMM_Model * >(argp1); result = (float)(arg1)->getLon(); @@ -4009,11 +4009,11 @@ SWIGINTERN PyObject *_wrap_WMM_Model_getLat(PyObject *SWIGUNUSEDPARM(self), PyOb int res1 = 0 ; PyObject * obj0 = 0 ; float result; - + if (!PyArg_ParseTuple(args,(char *)"O:WMM_Model_getLat",&obj0)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_WMM_Model, 0 | 0 ); if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "WMM_Model_getLat" "', argument " "1"" of type '" "WMM_Model *""'"); + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "WMM_Model_getLat" "', argument " "1"" of type '" "WMM_Model *""'"); } arg1 = reinterpret_cast< WMM_Model * >(argp1); result = (float)(arg1)->getLat(); @@ -4031,11 +4031,11 @@ SWIGINTERN PyObject *_wrap_WMM_Model_getHeight(PyObject *SWIGUNUSEDPARM(self), P int res1 = 0 ; PyObject * obj0 = 0 ; float result; - + if (!PyArg_ParseTuple(args,(char *)"O:WMM_Model_getHeight",&obj0)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_WMM_Model, 0 | 0 ); if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "WMM_Model_getHeight" "', argument " "1"" of type '" "WMM_Model *""'"); + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "WMM_Model_getHeight" "', argument " "1"" of type '" "WMM_Model *""'"); } arg1 = reinterpret_cast< WMM_Model * >(argp1); result = (float)(arg1)->getHeight(); @@ -4056,17 +4056,17 @@ SWIGINTERN PyObject *_wrap_WMM_Model_NumTerms_set(PyObject *SWIGUNUSEDPARM(self) int ecode2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; - + if (!PyArg_ParseTuple(args,(char *)"OO:WMM_Model_NumTerms_set",&obj0,&obj1)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_WMM_Model, 0 | 0 ); if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "WMM_Model_NumTerms_set" "', argument " "1"" of type '" "WMM_Model *""'"); + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "WMM_Model_NumTerms_set" "', argument " "1"" of type '" "WMM_Model *""'"); } arg1 = reinterpret_cast< WMM_Model * >(argp1); ecode2 = SWIG_AsVal_int(obj1, &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "WMM_Model_NumTerms_set" "', argument " "2"" of type '" "int""'"); - } + } arg2 = static_cast< int >(val2); if (arg1) (arg1)->NumTerms = arg2; resultobj = SWIG_Py_Void(); @@ -4083,11 +4083,11 @@ SWIGINTERN PyObject *_wrap_WMM_Model_NumTerms_get(PyObject *SWIGUNUSEDPARM(self) int res1 = 0 ; PyObject * obj0 = 0 ; int result; - + if (!PyArg_ParseTuple(args,(char *)"O:WMM_Model_NumTerms_get",&obj0)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_WMM_Model, 0 | 0 ); if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "WMM_Model_NumTerms_get" "', argument " "1"" of type '" "WMM_Model *""'"); + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "WMM_Model_NumTerms_get" "', argument " "1"" of type '" "WMM_Model *""'"); } arg1 = reinterpret_cast< WMM_Model * >(argp1); result = (int) ((arg1)->NumTerms); @@ -4108,17 +4108,17 @@ SWIGINTERN PyObject *_wrap_WMM_Model_LoadedEpoch_set(PyObject *SWIGUNUSEDPARM(se int ecode2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; - + if (!PyArg_ParseTuple(args,(char *)"OO:WMM_Model_LoadedEpoch_set",&obj0,&obj1)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_WMM_Model, 0 | 0 ); if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "WMM_Model_LoadedEpoch_set" "', argument " "1"" of type '" "WMM_Model *""'"); + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "WMM_Model_LoadedEpoch_set" "', argument " "1"" of type '" "WMM_Model *""'"); } arg1 = reinterpret_cast< WMM_Model * >(argp1); ecode2 = SWIG_AsVal_int(obj1, &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "WMM_Model_LoadedEpoch_set" "', argument " "2"" of type '" "int""'"); - } + } arg2 = static_cast< int >(val2); if (arg1) (arg1)->LoadedEpoch = arg2; resultobj = SWIG_Py_Void(); @@ -4135,11 +4135,11 @@ SWIGINTERN PyObject *_wrap_WMM_Model_LoadedEpoch_get(PyObject *SWIGUNUSEDPARM(se int res1 = 0 ; PyObject * obj0 = 0 ; int result; - + if (!PyArg_ParseTuple(args,(char *)"O:WMM_Model_LoadedEpoch_get",&obj0)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_WMM_Model, 0 | 0 ); if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "WMM_Model_LoadedEpoch_get" "', argument " "1"" of type '" "WMM_Model *""'"); + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "WMM_Model_LoadedEpoch_get" "', argument " "1"" of type '" "WMM_Model *""'"); } arg1 = reinterpret_cast< WMM_Model * >(argp1); result = (int) ((arg1)->LoadedEpoch); @@ -4160,17 +4160,17 @@ SWIGINTERN PyObject *_wrap_WMM_Model_nMax_set(PyObject *SWIGUNUSEDPARM(self), Py int ecode2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; - + if (!PyArg_ParseTuple(args,(char *)"OO:WMM_Model_nMax_set",&obj0,&obj1)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_WMM_Model, 0 | 0 ); if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "WMM_Model_nMax_set" "', argument " "1"" of type '" "WMM_Model *""'"); + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "WMM_Model_nMax_set" "', argument " "1"" of type '" "WMM_Model *""'"); } arg1 = reinterpret_cast< WMM_Model * >(argp1); ecode2 = SWIG_AsVal_int(obj1, &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "WMM_Model_nMax_set" "', argument " "2"" of type '" "int""'"); - } + } arg2 = static_cast< int >(val2); if (arg1) (arg1)->nMax = arg2; resultobj = SWIG_Py_Void(); @@ -4187,11 +4187,11 @@ SWIGINTERN PyObject *_wrap_WMM_Model_nMax_get(PyObject *SWIGUNUSEDPARM(self), Py int res1 = 0 ; PyObject * obj0 = 0 ; int result; - + if (!PyArg_ParseTuple(args,(char *)"O:WMM_Model_nMax_get",&obj0)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_WMM_Model, 0 | 0 ); if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "WMM_Model_nMax_get" "', argument " "1"" of type '" "WMM_Model *""'"); + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "WMM_Model_nMax_get" "', argument " "1"" of type '" "WMM_Model *""'"); } arg1 = reinterpret_cast< WMM_Model * >(argp1); result = (int) ((arg1)->nMax); @@ -4212,17 +4212,17 @@ SWIGINTERN PyObject *_wrap_WMM_Model_nMaxEMM_set(PyObject *SWIGUNUSEDPARM(self), int ecode2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; - + if (!PyArg_ParseTuple(args,(char *)"OO:WMM_Model_nMaxEMM_set",&obj0,&obj1)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_WMM_Model, 0 | 0 ); if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "WMM_Model_nMaxEMM_set" "', argument " "1"" of type '" "WMM_Model *""'"); + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "WMM_Model_nMaxEMM_set" "', argument " "1"" of type '" "WMM_Model *""'"); } arg1 = reinterpret_cast< WMM_Model * >(argp1); ecode2 = SWIG_AsVal_int(obj1, &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "WMM_Model_nMaxEMM_set" "', argument " "2"" of type '" "int""'"); - } + } arg2 = static_cast< int >(val2); if (arg1) (arg1)->nMaxEMM = arg2; resultobj = SWIG_Py_Void(); @@ -4239,11 +4239,11 @@ SWIGINTERN PyObject *_wrap_WMM_Model_nMaxEMM_get(PyObject *SWIGUNUSEDPARM(self), int res1 = 0 ; PyObject * obj0 = 0 ; int result; - + if (!PyArg_ParseTuple(args,(char *)"O:WMM_Model_nMaxEMM_get",&obj0)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_WMM_Model, 0 | 0 ); if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "WMM_Model_nMaxEMM_get" "', argument " "1"" of type '" "WMM_Model *""'"); + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "WMM_Model_nMaxEMM_get" "', argument " "1"" of type '" "WMM_Model *""'"); } arg1 = reinterpret_cast< WMM_Model * >(argp1); result = (int) ((arg1)->nMaxEMM); @@ -4264,18 +4264,18 @@ SWIGINTERN PyObject *_wrap_WMM_Model_Ellip_set(PyObject *SWIGUNUSEDPARM(self), P int res2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; - + if (!PyArg_ParseTuple(args,(char *)"OO:WMM_Model_Ellip_set",&obj0,&obj1)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_WMM_Model, 0 | 0 ); if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "WMM_Model_Ellip_set" "', argument " "1"" of type '" "WMM_Model *""'"); + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "WMM_Model_Ellip_set" "', argument " "1"" of type '" "WMM_Model *""'"); } arg1 = reinterpret_cast< WMM_Model * >(argp1); { res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_MAGtype_Ellipsoid, 0 | 0); if (!SWIG_IsOK(res2)) { - SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "WMM_Model_Ellip_set" "', argument " "2"" of type '" "MAGtype_Ellipsoid""'"); - } + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "WMM_Model_Ellip_set" "', argument " "2"" of type '" "MAGtype_Ellipsoid""'"); + } if (!argp2) { SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "WMM_Model_Ellip_set" "', argument " "2"" of type '" "MAGtype_Ellipsoid""'"); } else { @@ -4299,11 +4299,11 @@ SWIGINTERN PyObject *_wrap_WMM_Model_Ellip_get(PyObject *SWIGUNUSEDPARM(self), P int res1 = 0 ; PyObject * obj0 = 0 ; MAGtype_Ellipsoid result; - + if (!PyArg_ParseTuple(args,(char *)"O:WMM_Model_Ellip_get",&obj0)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_WMM_Model, 0 | 0 ); if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "WMM_Model_Ellip_get" "', argument " "1"" of type '" "WMM_Model *""'"); + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "WMM_Model_Ellip_get" "', argument " "1"" of type '" "WMM_Model *""'"); } arg1 = reinterpret_cast< WMM_Model * >(argp1); result = ((arg1)->Ellip); @@ -4324,18 +4324,18 @@ SWIGINTERN PyObject *_wrap_WMM_Model_CoordSpherical_set(PyObject *SWIGUNUSEDPARM int res2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; - + if (!PyArg_ParseTuple(args,(char *)"OO:WMM_Model_CoordSpherical_set",&obj0,&obj1)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_WMM_Model, 0 | 0 ); if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "WMM_Model_CoordSpherical_set" "', argument " "1"" of type '" "WMM_Model *""'"); + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "WMM_Model_CoordSpherical_set" "', argument " "1"" of type '" "WMM_Model *""'"); } arg1 = reinterpret_cast< WMM_Model * >(argp1); { res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_MAGtype_CoordSpherical, 0 | 0); if (!SWIG_IsOK(res2)) { - SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "WMM_Model_CoordSpherical_set" "', argument " "2"" of type '" "MAGtype_CoordSpherical""'"); - } + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "WMM_Model_CoordSpherical_set" "', argument " "2"" of type '" "MAGtype_CoordSpherical""'"); + } if (!argp2) { SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "WMM_Model_CoordSpherical_set" "', argument " "2"" of type '" "MAGtype_CoordSpherical""'"); } else { @@ -4359,11 +4359,11 @@ SWIGINTERN PyObject *_wrap_WMM_Model_CoordSpherical_get(PyObject *SWIGUNUSEDPARM int res1 = 0 ; PyObject * obj0 = 0 ; MAGtype_CoordSpherical result; - + if (!PyArg_ParseTuple(args,(char *)"O:WMM_Model_CoordSpherical_get",&obj0)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_WMM_Model, 0 | 0 ); if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "WMM_Model_CoordSpherical_get" "', argument " "1"" of type '" "WMM_Model *""'"); + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "WMM_Model_CoordSpherical_get" "', argument " "1"" of type '" "WMM_Model *""'"); } arg1 = reinterpret_cast< WMM_Model * >(argp1); result = ((arg1)->CoordSpherical); @@ -4384,18 +4384,18 @@ SWIGINTERN PyObject *_wrap_WMM_Model_CoordGeodetic_set(PyObject *SWIGUNUSEDPARM( int res2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; - + if (!PyArg_ParseTuple(args,(char *)"OO:WMM_Model_CoordGeodetic_set",&obj0,&obj1)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_WMM_Model, 0 | 0 ); if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "WMM_Model_CoordGeodetic_set" "', argument " "1"" of type '" "WMM_Model *""'"); + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "WMM_Model_CoordGeodetic_set" "', argument " "1"" of type '" "WMM_Model *""'"); } arg1 = reinterpret_cast< WMM_Model * >(argp1); { res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_MAGtype_CoordGeodetic, 0 | 0); if (!SWIG_IsOK(res2)) { - SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "WMM_Model_CoordGeodetic_set" "', argument " "2"" of type '" "MAGtype_CoordGeodetic""'"); - } + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "WMM_Model_CoordGeodetic_set" "', argument " "2"" of type '" "MAGtype_CoordGeodetic""'"); + } if (!argp2) { SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "WMM_Model_CoordGeodetic_set" "', argument " "2"" of type '" "MAGtype_CoordGeodetic""'"); } else { @@ -4419,11 +4419,11 @@ SWIGINTERN PyObject *_wrap_WMM_Model_CoordGeodetic_get(PyObject *SWIGUNUSEDPARM( int res1 = 0 ; PyObject * obj0 = 0 ; MAGtype_CoordGeodetic result; - + if (!PyArg_ParseTuple(args,(char *)"O:WMM_Model_CoordGeodetic_get",&obj0)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_WMM_Model, 0 | 0 ); if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "WMM_Model_CoordGeodetic_get" "', argument " "1"" of type '" "WMM_Model *""'"); + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "WMM_Model_CoordGeodetic_get" "', argument " "1"" of type '" "WMM_Model *""'"); } arg1 = reinterpret_cast< WMM_Model * >(argp1); result = ((arg1)->CoordGeodetic); @@ -4444,18 +4444,18 @@ SWIGINTERN PyObject *_wrap_WMM_Model_UserDate_set(PyObject *SWIGUNUSEDPARM(self) int res2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; - + if (!PyArg_ParseTuple(args,(char *)"OO:WMM_Model_UserDate_set",&obj0,&obj1)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_WMM_Model, 0 | 0 ); if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "WMM_Model_UserDate_set" "', argument " "1"" of type '" "WMM_Model *""'"); + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "WMM_Model_UserDate_set" "', argument " "1"" of type '" "WMM_Model *""'"); } arg1 = reinterpret_cast< WMM_Model * >(argp1); { res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_MAGtype_Date, 0 | 0); if (!SWIG_IsOK(res2)) { - SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "WMM_Model_UserDate_set" "', argument " "2"" of type '" "MAGtype_Date""'"); - } + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "WMM_Model_UserDate_set" "', argument " "2"" of type '" "MAGtype_Date""'"); + } if (!argp2) { SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "WMM_Model_UserDate_set" "', argument " "2"" of type '" "MAGtype_Date""'"); } else { @@ -4479,11 +4479,11 @@ SWIGINTERN PyObject *_wrap_WMM_Model_UserDate_get(PyObject *SWIGUNUSEDPARM(self) int res1 = 0 ; PyObject * obj0 = 0 ; MAGtype_Date result; - + if (!PyArg_ParseTuple(args,(char *)"O:WMM_Model_UserDate_get",&obj0)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_WMM_Model, 0 | 0 ); if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "WMM_Model_UserDate_get" "', argument " "1"" of type '" "WMM_Model *""'"); + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "WMM_Model_UserDate_get" "', argument " "1"" of type '" "WMM_Model *""'"); } arg1 = reinterpret_cast< WMM_Model * >(argp1); result = ((arg1)->UserDate); @@ -4504,18 +4504,18 @@ SWIGINTERN PyObject *_wrap_WMM_Model_GeoMagneticElements_set(PyObject *SWIGUNUSE int res2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; - + if (!PyArg_ParseTuple(args,(char *)"OO:WMM_Model_GeoMagneticElements_set",&obj0,&obj1)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_WMM_Model, 0 | 0 ); if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "WMM_Model_GeoMagneticElements_set" "', argument " "1"" of type '" "WMM_Model *""'"); + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "WMM_Model_GeoMagneticElements_set" "', argument " "1"" of type '" "WMM_Model *""'"); } arg1 = reinterpret_cast< WMM_Model * >(argp1); { res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_MAGtype_GeoMagneticElements, 0 | 0); if (!SWIG_IsOK(res2)) { - SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "WMM_Model_GeoMagneticElements_set" "', argument " "2"" of type '" "MAGtype_GeoMagneticElements""'"); - } + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "WMM_Model_GeoMagneticElements_set" "', argument " "2"" of type '" "MAGtype_GeoMagneticElements""'"); + } if (!argp2) { SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "WMM_Model_GeoMagneticElements_set" "', argument " "2"" of type '" "MAGtype_GeoMagneticElements""'"); } else { @@ -4539,11 +4539,11 @@ SWIGINTERN PyObject *_wrap_WMM_Model_GeoMagneticElements_get(PyObject *SWIGUNUSE int res1 = 0 ; PyObject * obj0 = 0 ; MAGtype_GeoMagneticElements result; - + if (!PyArg_ParseTuple(args,(char *)"O:WMM_Model_GeoMagneticElements_get",&obj0)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_WMM_Model, 0 | 0 ); if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "WMM_Model_GeoMagneticElements_get" "', argument " "1"" of type '" "WMM_Model *""'"); + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "WMM_Model_GeoMagneticElements_get" "', argument " "1"" of type '" "WMM_Model *""'"); } arg1 = reinterpret_cast< WMM_Model * >(argp1); result = ((arg1)->GeoMagneticElements); @@ -4564,18 +4564,18 @@ SWIGINTERN PyObject *_wrap_WMM_Model_Geoid_set(PyObject *SWIGUNUSEDPARM(self), P int res2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; - + if (!PyArg_ParseTuple(args,(char *)"OO:WMM_Model_Geoid_set",&obj0,&obj1)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_WMM_Model, 0 | 0 ); if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "WMM_Model_Geoid_set" "', argument " "1"" of type '" "WMM_Model *""'"); + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "WMM_Model_Geoid_set" "', argument " "1"" of type '" "WMM_Model *""'"); } arg1 = reinterpret_cast< WMM_Model * >(argp1); { res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_MAGtype_Geoid, 0 | 0); if (!SWIG_IsOK(res2)) { - SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "WMM_Model_Geoid_set" "', argument " "2"" of type '" "MAGtype_Geoid""'"); - } + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "WMM_Model_Geoid_set" "', argument " "2"" of type '" "MAGtype_Geoid""'"); + } if (!argp2) { SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "WMM_Model_Geoid_set" "', argument " "2"" of type '" "MAGtype_Geoid""'"); } else { @@ -4599,11 +4599,11 @@ SWIGINTERN PyObject *_wrap_WMM_Model_Geoid_get(PyObject *SWIGUNUSEDPARM(self), P int res1 = 0 ; PyObject * obj0 = 0 ; MAGtype_Geoid result; - + if (!PyArg_ParseTuple(args,(char *)"O:WMM_Model_Geoid_get",&obj0)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_WMM_Model, 0 | 0 ); if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "WMM_Model_Geoid_get" "', argument " "1"" of type '" "WMM_Model *""'"); + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "WMM_Model_Geoid_get" "', argument " "1"" of type '" "WMM_Model *""'"); } arg1 = reinterpret_cast< WMM_Model * >(argp1); result = ((arg1)->Geoid); @@ -4644,7 +4644,7 @@ SWIGINTERN PyObject *_wrap_new_EMM_Model(PyObject *SWIGUNUSEDPARM(self), PyObjec PyObject * obj3 = 0 ; PyObject * obj4 = 0 ; EMM_Model *result = 0 ; - + if (!PyArg_ParseTuple(args,(char *)"OOOOO:new_EMM_Model",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail; res1 = SWIG_AsCharArray(obj0, temp1, 256); if (!SWIG_IsOK(res1)) { @@ -4654,22 +4654,22 @@ SWIGINTERN PyObject *_wrap_new_EMM_Model(PyObject *SWIGUNUSEDPARM(self), PyObjec ecode2 = SWIG_AsVal_float(obj1, &val2); if (!SWIG_IsOK(ecode2)) { SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_EMM_Model" "', argument " "2"" of type '" "float""'"); - } + } arg2 = static_cast< float >(val2); ecode3 = SWIG_AsVal_float(obj2, &val3); if (!SWIG_IsOK(ecode3)) { SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_EMM_Model" "', argument " "3"" of type '" "float""'"); - } + } arg3 = static_cast< float >(val3); ecode4 = SWIG_AsVal_float(obj3, &val4); if (!SWIG_IsOK(ecode4)) { SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "new_EMM_Model" "', argument " "4"" of type '" "float""'"); - } + } arg4 = static_cast< float >(val4); ecode5 = SWIG_AsVal_float(obj4, &val5); if (!SWIG_IsOK(ecode5)) { SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "new_EMM_Model" "', argument " "5"" of type '" "float""'"); - } + } arg5 = static_cast< float >(val5); result = (EMM_Model *)new EMM_Model((char const (*))arg1,arg2,arg3,arg4,arg5); resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_EMM_Model, SWIG_POINTER_NEW | 0 ); @@ -4685,11 +4685,11 @@ SWIGINTERN PyObject *_wrap_EMM_Model_setEM(PyObject *SWIGUNUSEDPARM(self), PyObj void *argp1 = 0 ; int res1 = 0 ; PyObject * obj0 = 0 ; - + if (!PyArg_ParseTuple(args,(char *)"O:EMM_Model_setEM",&obj0)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_EMM_Model, 0 | 0 ); if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "EMM_Model_setEM" "', argument " "1"" of type '" "EMM_Model *""'"); + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "EMM_Model_setEM" "', argument " "1"" of type '" "EMM_Model *""'"); } arg1 = reinterpret_cast< EMM_Model * >(argp1); (arg1)->setEM(); @@ -4706,11 +4706,11 @@ SWIGINTERN PyObject *_wrap_delete_EMM_Model(PyObject *SWIGUNUSEDPARM(self), PyOb void *argp1 = 0 ; int res1 = 0 ; PyObject * obj0 = 0 ; - + if (!PyArg_ParseTuple(args,(char *)"O:delete_EMM_Model",&obj0)) SWIG_fail; res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_EMM_Model, SWIG_POINTER_DISOWN | 0 ); if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_EMM_Model" "', argument " "1"" of type '" "EMM_Model *""'"); + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_EMM_Model" "', argument " "1"" of type '" "EMM_Model *""'"); } arg1 = reinterpret_cast< EMM_Model * >(argp1); delete arg1; @@ -4835,18 +4835,18 @@ static swig_const_info swig_const_table[] = { #endif /* ----------------------------------------------------------------------------- * Type initialization: - * This problem is tough by the requirement that no dynamic - * memory is used. Also, since swig_type_info structures store pointers to + * This problem is tough by the requirement that no dynamic + * memory is used. Also, since swig_type_info structures store pointers to * swig_cast_info structures and swig_cast_info structures store pointers back - * to swig_type_info structures, we need some lookup code at initialization. - * The idea is that swig generates all the structures that are needed. - * The runtime then collects these partially filled structures. - * The SWIG_InitializeModule function takes these initial arrays out of + * to swig_type_info structures, we need some lookup code at initialization. + * The idea is that swig generates all the structures that are needed. + * The runtime then collects these partially filled structures. + * The SWIG_InitializeModule function takes these initial arrays out of * swig_module, and does all the lookup, filling in the swig_module.types * array with the correct data and linking the correct swig_cast_info * structures together. * - * The generated swig_type_info structures are assigned staticly to an initial + * The generated swig_type_info structures are assigned staticly to an initial * array. We just loop through that array, and handle each type individually. * First we lookup if this type has been already loaded, and if so, use the * loaded structure instead of the generated one. Then we have to fill in the @@ -4856,17 +4856,17 @@ static swig_const_info swig_const_table[] = { * a column is one of the swig_cast_info structures for that type. * The cast_initial array is actually an array of arrays, because each row has * a variable number of columns. So to actually build the cast linked list, - * we find the array of casts associated with the type, and loop through it + * we find the array of casts associated with the type, and loop through it * adding the casts to the list. The one last trick we need to do is making * sure the type pointer in the swig_cast_info struct is correct. * - * First off, we lookup the cast->type name to see if it is already loaded. + * First off, we lookup the cast->type name to see if it is already loaded. * There are three cases to handle: * 1) If the cast->type has already been loaded AND the type we are adding * casting info to has not been loaded (it is in this module), THEN we * replace the cast->type pointer with the type pointer that has already * been loaded. - * 2) If BOTH types (the one we are adding casting info to, and the + * 2) If BOTH types (the one we are adding casting info to, and the * cast->type) are loaded, THEN the cast info has already been loaded by * the previous module so we just ignore it. * 3) Finally, if cast->type has not already been loaded, then we add that @@ -4891,9 +4891,9 @@ SWIG_InitializeModule(void *clientdata) { size_t i; swig_module_info *module_head, *iter; int found, init; - + clientdata = clientdata; - + /* check to see if the circular list has been setup, if not, set it up */ if (swig_module.next==0) { /* Initialize the swig_module */ @@ -4904,7 +4904,7 @@ SWIG_InitializeModule(void *clientdata) { } else { init = 0; } - + /* Try and load any already created modules */ module_head = SWIG_GetModule(clientdata); if (!module_head) { @@ -4923,20 +4923,20 @@ SWIG_InitializeModule(void *clientdata) { } iter=iter->next; } while (iter!= module_head); - + /* if the is found in the list, then all is done and we may leave */ if (found) return; /* otherwise we must add out module into the list */ swig_module.next = module_head->next; module_head->next = &swig_module; } - + /* When multiple interpeters are used, a module could have already been initialized in a different interpreter, but not yet have a pointer in this interpreter. In this case, we do not want to continue adding types... everything should be set up already */ if (init == 0) return; - + /* Now work on filling in swig_module.types */ #ifdef SWIGRUNTIME_DEBUG printf("SWIG_InitializeModule: size %d\n", swig_module.size); @@ -4945,11 +4945,11 @@ SWIG_InitializeModule(void *clientdata) { swig_type_info *type = 0; swig_type_info *ret; swig_cast_info *cast; - + #ifdef SWIGRUNTIME_DEBUG printf("SWIG_InitializeModule: type %d %s\n", i, swig_module.type_initial[i]->name); #endif - + /* if there is another module already loaded */ if (swig_module.next != &swig_module) { type = SWIG_MangledTypeQueryModule(swig_module.next, &swig_module, swig_module.type_initial[i]->name); @@ -4968,7 +4968,7 @@ SWIG_InitializeModule(void *clientdata) { } else { type = swig_module.type_initial[i]; } - + /* Insert casting types */ cast = swig_module.cast_initial[i]; while (cast->type) { @@ -4999,7 +4999,7 @@ SWIG_InitializeModule(void *clientdata) { if (!ocast) ret = 0; } } - + if (!ret) { #ifdef SWIGRUNTIME_DEBUG printf("SWIG_InitializeModule: adding cast %s\n", cast->type->name); @@ -5016,7 +5016,7 @@ SWIG_InitializeModule(void *clientdata) { swig_module.types[i] = type; } swig_module.types[i] = 0; - + #ifdef SWIGRUNTIME_DEBUG printf("**** SWIG_InitializeModule: Cast List ******\n"); for (i = 0; i < swig_module.size; ++i) { @@ -5044,10 +5044,10 @@ SWIG_PropagateClientData(void) { size_t i; swig_cast_info *equiv; static int init_run = 0; - + if (init_run) return; init_run = 1; - + for (i = 0; i < swig_module.size; i++) { if (swig_module.types[i]->clientdata) { equiv = swig_module.types[i]->cast; @@ -5075,28 +5075,28 @@ SWIG_PropagateClientData(void) { #ifdef __cplusplus extern "C" { #endif - + /* Python-specific SWIG API */ #define SWIG_newvarlink() SWIG_Python_newvarlink() #define SWIG_addvarlink(p, name, get_attr, set_attr) SWIG_Python_addvarlink(p, name, get_attr, set_attr) #define SWIG_InstallConstants(d, constants) SWIG_Python_InstallConstants(d, constants) - + /* ----------------------------------------------------------------------------- * global variable support code. * ----------------------------------------------------------------------------- */ - + typedef struct swig_globalvar { char *name; /* Name of global variable */ PyObject *(*get_attr)(void); /* Return the current value */ int (*set_attr)(PyObject *); /* Set the value */ struct swig_globalvar *next; } swig_globalvar; - + typedef struct swig_varlinkobject { PyObject_HEAD swig_globalvar *vars; } swig_varlinkobject; - + SWIGINTERN PyObject * swig_varlink_repr(swig_varlinkobject *SWIGUNUSEDPARM(v)) { #if PY_VERSION_HEX >= 0x03000000 @@ -5105,7 +5105,7 @@ extern "C" { return PyString_FromString(""); #endif } - + SWIGINTERN PyObject * swig_varlink_str(swig_varlinkobject *v) { #if PY_VERSION_HEX >= 0x03000000 @@ -5143,7 +5143,7 @@ extern "C" { #endif return str; } - + SWIGINTERN int swig_varlink_print(swig_varlinkobject *v, FILE *fp, int SWIGUNUSEDPARM(flags)) { char *tmp; @@ -5154,7 +5154,7 @@ extern "C" { Py_DECREF(str); return 0; } - + SWIGINTERN void swig_varlink_dealloc(swig_varlinkobject *v) { swig_globalvar *var = v->vars; @@ -5165,7 +5165,7 @@ extern "C" { var = n; } } - + SWIGINTERN PyObject * swig_varlink_getattr(swig_varlinkobject *v, char *n) { PyObject *res = NULL; @@ -5182,7 +5182,7 @@ extern "C" { } return res; } - + SWIGINTERN int swig_varlink_setattr(swig_varlinkobject *v, char *n, PyObject *p) { int res = 1; @@ -5199,7 +5199,7 @@ extern "C" { } return res; } - + SWIGINTERN PyTypeObject* swig_varlink_type(void) { static char varlink__doc__[] = "Swig var link object"; @@ -5262,7 +5262,7 @@ extern "C" { } return &varlink_type; } - + /* Create a variable linking object for use later */ SWIGINTERN PyObject * SWIG_Python_newvarlink(void) { @@ -5272,8 +5272,8 @@ extern "C" { } return ((PyObject*) result); } - - SWIGINTERN void + + SWIGINTERN void SWIG_Python_addvarlink(PyObject *p, char *name, PyObject *(*get_attr)(void), int (*set_attr)(PyObject *p)) { swig_varlinkobject *v = (swig_varlinkobject *) p; swig_globalvar *gv = (swig_globalvar *) malloc(sizeof(swig_globalvar)); @@ -5289,18 +5289,18 @@ extern "C" { } v->vars = gv; } - + SWIGINTERN PyObject * SWIG_globals(void) { - static PyObject *_SWIG_globals = 0; - if (!_SWIG_globals) _SWIG_globals = SWIG_newvarlink(); + static PyObject *_SWIG_globals = 0; + if (!_SWIG_globals) _SWIG_globals = SWIG_newvarlink(); return _SWIG_globals; } - + /* ----------------------------------------------------------------------------- * constants/methods manipulation * ----------------------------------------------------------------------------- */ - + /* Install Constants */ SWIGINTERN void SWIG_Python_InstallConstants(PyObject *d, swig_const_info constants[]) { @@ -5324,11 +5324,11 @@ extern "C" { } } } - + /* -----------------------------------------------------------------------------*/ /* Fix SwigMethods to carry the callback ptrs when needed */ /* -----------------------------------------------------------------------------*/ - + SWIGINTERN void SWIG_Python_FixMethods(PyMethodDef *methods, swig_const_info *const_table, @@ -5342,7 +5342,7 @@ extern "C" { swig_const_info *ci = 0; const char *name = c + 10; for (j = 0; const_table[j].type; ++j) { - if (strncmp(const_table[j].name, name, + if (strncmp(const_table[j].name, name, strlen(const_table[j].name)) == 0) { ci = &(const_table[j]); break; @@ -5369,8 +5369,8 @@ extern "C" { } } } - } - + } + #ifdef __cplusplus } #endif @@ -5383,7 +5383,7 @@ extern "C" { extern "C" #endif -SWIGEXPORT +SWIGEXPORT #if PY_VERSION_HEX >= 0x03000000 PyObject* #else @@ -5413,7 +5413,7 @@ SWIG_init(void) { NULL }; #endif - + #if defined(SWIGPYTHON_BUILTIN) static SwigPyClientData SwigPyObject_clientdata = { 0, 0, 0, 0, 0, 0, 0 @@ -5440,13 +5440,13 @@ SWIG_init(void) { PyObject *this_descr; PyObject *thisown_descr; int i; - + (void)builtin_pytype; (void)builtin_base_count; (void)builtin_basetype; (void)tuple; (void)static_getset; - + /* metatype is used to implement static member variables. */ metatype_args = Py_BuildValue("(s(O){})", "SwigPyObjectType", &PyType_Type); assert(metatype_args); @@ -5456,19 +5456,19 @@ SWIG_init(void) { metatype->tp_setattro = (setattrofunc) &SwigPyObjectType_setattro; assert(PyType_Ready(metatype) >= 0); #endif - + /* Fix SwigMethods to carry the callback ptrs when needed */ SWIG_Python_FixMethods(SwigMethods, swig_const_table, swig_types, swig_type_initial); - + #if PY_VERSION_HEX >= 0x03000000 m = PyModule_Create(&SWIG_module); #else m = Py_InitModule((char *) SWIG_name, SwigMethods); #endif md = d = PyModule_GetDict(m); - + SWIG_InitializeModule(0); - + #ifdef SWIGPYTHON_BUILTIN SwigPyObject_stype = SWIG_MangledTypeQuery("_p_SwigPyObject"); assert(SwigPyObject_stype); @@ -5484,19 +5484,19 @@ SWIG_init(void) { return; # endif } - + /* All objects have a 'this' attribute */ this_descr = PyDescr_NewGetSet(SwigPyObject_type(), &this_getset_def); (void)this_descr; - + /* All objects have a 'thisown' attribute */ thisown_descr = PyDescr_NewGetSet(SwigPyObject_type(), &thisown_getset_def); (void)thisown_descr; - + public_interface = PyList_New(0); public_symbol = 0; (void)public_symbol; - + PyDict_SetItemString(md, "__all__", public_interface); Py_DECREF(public_interface); for (i = 0; SwigMethods[i].ml_name != NULL; ++i) @@ -5504,13 +5504,12 @@ SWIG_init(void) { for (i = 0; swig_const_table[i].name != 0; ++i) SwigPyBuiltin_AddPublicSymbol(public_interface, swig_const_table[i].name); #endif - + SWIG_InstallConstants(d,swig_const_table); - + #if PY_VERSION_HEX >= 0x03000000 return m; #else return; #endif } - diff --git a/RMextract/EMM/GeomagnetismHeader.h b/RMextract/EMM/GeomagnetismHeader.h index 4450e25..3ce00ef 100644 --- a/RMextract/EMM/GeomagnetismHeader.h +++ b/RMextract/EMM/GeomagnetismHeader.h @@ -109,12 +109,12 @@ typedef struct { double DecimalYear; /* decimal years */ } MAGtype_Date; -/*typedef struct { +/*typedef struct { int MAG_Mercator; int MAG_LambertConformalConic; int MAG_PolarStereographic; int MAG_TransverseMercator; -} MAGtype_MapProjectionCode; +} MAGtype_MapProjectionCode; Deprecated, Will be removed in the next revision.*/ typedef struct { diff --git a/RMextract/EMM/GeomagnetismLibrary.c b/RMextract/EMM/GeomagnetismLibrary.c index eb0feb8..45f299d 100644 --- a/RMextract/EMM/GeomagnetismLibrary.c +++ b/RMextract/EMM/GeomagnetismLibrary.c @@ -113,7 +113,7 @@ * does everything necessary to compute the geomagnetic elements from a given * geodetic point in space and magnetic model adjusted for the appropriate * date. These functions are the external functions necessary to create a - * program that uses or calculates the magnetic field. + * program that uses or calculates the magnetic field. ****************************************************************************** ******************************************************************************/ @@ -149,7 +149,7 @@ CALLS: MAG_AllocateLegendreFunctionMemory(NumTerms); ( For storing the ALF fu int NumTerms; MAGtype_MagneticResults MagneticResultsSph, MagneticResultsGeo, MagneticResultsSphVar, MagneticResultsGeoVar; - NumTerms = ((TimedMagneticModel->nMax + 1) * (TimedMagneticModel->nMax + 2) / 2); + NumTerms = ((TimedMagneticModel->nMax + 1) * (TimedMagneticModel->nMax + 2) / 2); LegendreFunction = MAG_AllocateLegendreFunctionMemory(NumTerms); /* For storing the ALF functions */ SphVariables = MAG_AllocateSphVarMemory(TimedMagneticModel->nMax); MAG_ComputeSphericalHarmonicVariables(Ellip, CoordSpherical, TimedMagneticModel->nMax, SphVariables); /* Compute Spherical Harmonic variables */ @@ -499,8 +499,8 @@ int MAG_robustReadMagModels(char *filename, MAGtype_MagneticModel *(*magneticmod /****************************************************************************** ********************************User Interface******************************** - * This grouping consists of functions which interact with the directly with - * the user and are generally specific to the XXX_point.c, XXX_grid.c, and + * This grouping consists of functions which interact with the directly with + * the user and are generally specific to the XXX_point.c, XXX_grid.c, and * XXX_file.c programs. They deal with input from and output to the user. ******************************************************************************/ @@ -1473,8 +1473,8 @@ CALLS : none /****************************************************************************** ********************************Memory and File Processing******************** - * This grouping consists of functions that read coefficient files into the - * memory, allocate memory, free memory or print models into coefficient files. + * This grouping consists of functions that read coefficient files into the + * memory, allocate memory, free memory or print models into coefficient files. ******************************************************************************/ @@ -2271,8 +2271,8 @@ char *MAG_Trim(char *str) /****************************************************************************** *************Conversions, Transformations, and other Calculations************** * This grouping consists of functions that perform unit conversions, coordinate - * transformations and other simple or straightforward calculations that are - * usually easily replicable with a typical scientific calculator. + * transformations and other simple or straightforward calculations that are + * usually easily replicable with a typical scientific calculator. ******************************************************************************/ // @@ -2775,10 +2775,10 @@ void MAG_SphericalToCartesian(MAGtype_CoordSpherical CoordSpherical, double *x, { double radphi; double radlambda; - + radphi = CoordSpherical.phig * (M_PI / 180); radlambda = CoordSpherical.lambda * (M_PI / 180); - + *x = CoordSpherical.r * cos(radphi) * cos(radlambda); *y = CoordSpherical.r * cos(radphi) * sin(radlambda); *z = CoordSpherical.r * sin(radphi); @@ -3051,8 +3051,8 @@ CALLS : none /****************************************************************************** ********************************Spherical Harmonics*************************** - * This grouping consists of functions that together take gauss coefficients - * and return a magnetic vector for an input location in spherical coordinates + * This grouping consists of functions that together take gauss coefficients + * and return a magnetic vector for an input location in spherical coordinates ******************************************************************************/ int MAG_AssociatedLegendreFunction(MAGtype_CoordSpherical CoordSpherical, int nMax, MAGtype_LegendreFunction *LegendreFunction) @@ -3763,7 +3763,7 @@ CALLS : none { TimedMagneticModel->Main_Field_Coeff_H[index] = MagneticModel->Main_Field_Coeff_H[index] + (UserDate.DecimalYear - MagneticModel->epoch) * MagneticModel->Secular_Var_Coeff_H[index]; TimedMagneticModel->Main_Field_Coeff_G[index] = MagneticModel->Main_Field_Coeff_G[index] + (UserDate.DecimalYear - MagneticModel->epoch) * MagneticModel->Secular_Var_Coeff_G[index]; - TimedMagneticModel->Secular_Var_Coeff_H[index] = MagneticModel->Secular_Var_Coeff_H[index]; // We need a copy of the secular var coef to calculate secular change + TimedMagneticModel->Secular_Var_Coeff_H[index] = MagneticModel->Secular_Var_Coeff_H[index]; // We need a copy of the secular var coef to calculate secular change TimedMagneticModel->Secular_Var_Coeff_G[index] = MagneticModel->Secular_Var_Coeff_G[index]; } else { @@ -3780,8 +3780,8 @@ CALLS : none /****************************************************************************** *************************************Geoid************************************ - * This grouping consists of functions that make calculations to adjust - * ellipsoid height to height above the geoid (Height above MSL). + * This grouping consists of functions that make calculations to adjust + * ellipsoid height to height above the geoid (Height above MSL). ****************************************************************************** ******************************************************************************/ diff --git a/RMextract/LOFAR_TOOLS/createRMParmdb.py b/RMextract/LOFAR_TOOLS/createRMParmdb.py index 4f6576d..fda6c84 100644 --- a/RMextract/LOFAR_TOOLS/createRMParmdb.py +++ b/RMextract/LOFAR_TOOLS/createRMParmdb.py @@ -8,87 +8,161 @@ import RMextract.getRM as gt -def createRMParmdb(MS,parmdbname,create=True,patchname='', - server="ftp://cddis.gsfc.nasa.gov/gnss/products/ionex/", - prefix='codg', - ionexPath="IONEXdata/", - earth_rot=0, - timestep=900., - stat_names=None): - myParmdb=parmdb.parmdb(parmdbname,create=create) +def createRMParmdb( + MS, + parmdbname, + create=True, + patchname="", + server="ftp://cddis.gsfc.nasa.gov/gnss/products/ionex/", + prefix="codg", + ionexPath="IONEXdata/", + earth_rot=0, + timestep=900.0, + stat_names=None, +): + myParmdb = parmdb.parmdb(parmdbname, create=create) if create: - myParmdb.addDefValues("Gain:0:0:Ampl",1.e-4) - myParmdb.addDefValues("DirectionalGain:0:0:Ampl",1.) - myParmdb.addDefValues("DirectionalGain:1:1:Ampl",1.) - myParmdb.addDefValues("Gain:0:0:Real",1.e-4) - myParmdb.addDefValues("Gain:1:1:Real",1.e-4) - myParmdb.addDefValues("DirectionalGain:0:0:Real",1.) - myParmdb.addDefValues("DirectionalGain:1:1:Real",1.) - myMS=tab.table(MS) - stations=tab.table(myMS.getkeyword('ANTENNA')).getcol('NAME') - stat_pos=tab.table(myMS.getkeyword('ANTENNA')).getcol('POSITION') - if not stat_names==None: - if not(stat_names=='all'): - stat_pos=[stat_pos[stations.index(name)] for name in stat_names] + myParmdb.addDefValues("Gain:0:0:Ampl", 1.0e-4) + myParmdb.addDefValues("DirectionalGain:0:0:Ampl", 1.0) + myParmdb.addDefValues("DirectionalGain:1:1:Ampl", 1.0) + myParmdb.addDefValues("Gain:0:0:Real", 1.0e-4) + myParmdb.addDefValues("Gain:1:1:Real", 1.0e-4) + myParmdb.addDefValues("DirectionalGain:0:0:Real", 1.0) + myParmdb.addDefValues("DirectionalGain:1:1:Real", 1.0) + myMS = tab.table(MS) + stations = tab.table(myMS.getkeyword("ANTENNA")).getcol("NAME") + stat_pos = tab.table(myMS.getkeyword("ANTENNA")).getcol("POSITION") + if not stat_names == None: + if not (stat_names == "all"): + stat_pos = [stat_pos[stations.index(name)] for name in stat_names] else: - stat_names=stations[:] + stat_names = stations[:] else: - stat_names=stations[2:3] - stat_pos=stat_pos[2:3] - result=gt.getRM(MS=MS,server=server,ionexPath=ionexPath,prefix=prefix,earth_rot=earth_rot,timestep=timestep,stat_names=stat_names,stat_positions=stat_pos) - RM=result['RM'] + stat_names = stations[2:3] + stat_pos = stat_pos[2:3] + result = gt.getRM( + MS=MS, + server=server, + ionexPath=ionexPath, + prefix=prefix, + earth_rot=earth_rot, + timestep=timestep, + stat_names=stat_names, + stat_positions=stat_pos, + ) + RM = result["RM"] for st in stations: - #print "storing station",st,(st in RM.keys()) - if not (st in RM.keys()): - stname=RM.keys()[0] + # print "storing station",st,(st in RM.keys()) + if st not in RM.keys(): + stname = RM.keys()[0] else: - stname=st - RM[stname]=RM[stname].reshape(RM[stname].shape[:1]+(1,)) - myValue=myParmdb.makeValue(values=RM[stname], sfreq=1e10, efreq=2e10, stime=result['times'], etime=np.ones(result['times'].shape,dtype=float)*result['timestep'], asStartEnd=False) + stname = st + RM[stname] = RM[stname].reshape(RM[stname].shape[:1] + (1,)) + myValue = myParmdb.makeValue( + values=RM[stname], + sfreq=1e10, + efreq=2e10, + stime=result["times"], + etime=np.ones(result["times"].shape, dtype=float) * result["timestep"], + asStartEnd=False, + ) if patchname: - valuename = "RotationMeasure:%s:%s"%(st,patchname) + valuename = "RotationMeasure:%s:%s" % (st, patchname) else: - valuename = "RotationMeasure:%s"%(st) - myParmdb.deleteValues(valuename) - myParmdb.addValues(valuename,myValue) + valuename = "RotationMeasure:%s" % (st) + myParmdb.deleteValues(valuename) + myParmdb.addValues(valuename, myValue) + def main(): - descriptiontext = "Create a parmDB with the Ionospheric RM predicted from data in IONEX files.\n" + \ - "Default is to create a parmDB that is compatible with the \"rotationmeasure\" " + \ - "correction in NDPPP ApplyCal.\n" + descriptiontext = ( + "Create a parmDB with the Ionospheric RM predicted from data in IONEX files.\n" + + 'Default is to create a parmDB that is compatible with the "rotationmeasure" ' + + "correction in NDPPP ApplyCal.\n" + ) parser = argparse.ArgumentParser(description=descriptiontext) - - parser.add_argument('MS',help='Measurement-Set for which the parmDB is to be created.') - parser.add_argument('-o','--out', help='name of the parmdb',dest="parmdbName",default='RMParmdb') - parser.add_argument('-p','--patch',dest="patch",default="",type=str, - help='If given: create parameter-names that include a patch-name as needed for BBS. ' - 'The default is to create parameter-names without a patch-name as they are needed for ' - 'the "rotationmeasure" correction in NDPPP ApplyCal.') - #parser.add_argument('-s','--sky', help='name of the skymodel, if no source/patch name is given first will be selected. If you do not set the skymodel, the phasecenter of the MS will be assumed as your direction. If option --use_phase_center is used the direction in the sky model are ignored. However, it could still be useful to automatically select a patch name, which is needed for direction dependent parmareters.',dest="sky") - #parser.add_argument('-f','--use_phase_center', help='force using of phase center of MS, even if skymodel is supplied',action='store_true',dest="usePhaseCenter") - parser.add_argument('--IONprefix', help='prefix of IONEX files, either CODG or ROBR',dest="prefix",default='codg') - parser.add_argument('--IONserver', help='server of IONEX files',dest="server",default='ftp://cddis.gsfc.nasa.gov/gnss/products/ionex/') - parser.add_argument('--IONpath', help='location of IONEX files',dest="ionexPath",default='./') - parser.add_argument('--all','-a', help='calculate RM per station (default calculates only for CS002LBA)',action='store_true',dest="allStations") - parser.add_argument('-t','--timestep', help='timestep in seconds. for values <=0 (default) the timegrid of the MS is used ',dest="timestep",type=float,default=900.) - parser.add_argument('-e','--smart_interpol', help='float parameter describing how much of earth rotation is taken in to account in interpolation of the IONEX files. 1.0 means time interpolation assumes ionosphere rotates in opposite direction of the Earth. 0.0 (default) means no rotation applied',dest="earth_rot",type=float,default=0) - parser.add_argument('-r','--overwrite',help='overwrite existing parmdb',action='store_true',dest="overwrite") + + parser.add_argument( + "MS", help="Measurement-Set for which the parmDB is to be created." + ) + parser.add_argument( + "-o", "--out", help="name of the parmdb", dest="parmdbName", default="RMParmdb" + ) + parser.add_argument( + "-p", + "--patch", + dest="patch", + default="", + type=str, + help="If given: create parameter-names that include a patch-name as needed for BBS. " + "The default is to create parameter-names without a patch-name as they are needed for " + 'the "rotationmeasure" correction in NDPPP ApplyCal.', + ) + # parser.add_argument('-s','--sky', help='name of the skymodel, if no source/patch name is given first will be selected. If you do not set the skymodel, the phasecenter of the MS will be assumed as your direction. If option --use_phase_center is used the direction in the sky model are ignored. However, it could still be useful to automatically select a patch name, which is needed for direction dependent parmareters.',dest="sky") + # parser.add_argument('-f','--use_phase_center', help='force using of phase center of MS, even if skymodel is supplied',action='store_true',dest="usePhaseCenter") + parser.add_argument( + "--IONprefix", + help="prefix of IONEX files, either CODG or ROBR", + dest="prefix", + default="codg", + ) + parser.add_argument( + "--IONserver", + help="server of IONEX files", + dest="server", + default="ftp://cddis.gsfc.nasa.gov/gnss/products/ionex/", + ) + parser.add_argument( + "--IONpath", help="location of IONEX files", dest="ionexPath", default="./" + ) + parser.add_argument( + "--all", + "-a", + help="calculate RM per station (default calculates only for CS002LBA)", + action="store_true", + dest="allStations", + ) + parser.add_argument( + "-t", + "--timestep", + help="timestep in seconds. for values <=0 (default) the timegrid of the MS is used ", + dest="timestep", + type=float, + default=900.0, + ) + parser.add_argument( + "-e", + "--smart_interpol", + help="float parameter describing how much of earth rotation is taken in to account in interpolation of the IONEX files. 1.0 means time interpolation assumes ionosphere rotates in opposite direction of the Earth. 0.0 (default) means no rotation applied", + dest="earth_rot", + type=float, + default=0, + ) + parser.add_argument( + "-r", + "--overwrite", + help="overwrite existing parmdb", + action="store_true", + dest="overwrite", + ) args = parser.parse_args() - - stat_names=None + + stat_names = None if args.allStations: - stat_names='all' + stat_names = "all" if not args.overwrite and not os.path.isdir(args.parmdbName): - args.overwrite=True - - createRMParmdb(args.MS, - parmdbname=args.parmdbName, - create=args.overwrite, - patchname=args.patch, - server=args.server, - prefix=args.prefix, - ionexPath=args.ionexPath, - earth_rot=args.earth_rot, - timestep=args.timestep, - stat_names=stat_names) + args.overwrite = True + + createRMParmdb( + args.MS, + parmdbname=args.parmdbName, + create=args.overwrite, + patchname=args.patch, + server=args.server, + prefix=args.prefix, + ionexPath=args.ionexPath, + earth_rot=args.earth_rot, + timestep=args.timestep, + stat_names=stat_names, + ) diff --git a/RMextract/LOFAR_TOOLS/createRMh5parm.py b/RMextract/LOFAR_TOOLS/createRMh5parm.py index 8550fd9..e9f6f90 100644 --- a/RMextract/LOFAR_TOOLS/createRMh5parm.py +++ b/RMextract/LOFAR_TOOLS/createRMh5parm.py @@ -7,10 +7,9 @@ Changes for prefactor included by Alexander Drabent (02 June 2021) """ + import argparse -import logging import os -import sys import numpy as np import pyrap.tables as pt @@ -22,39 +21,52 @@ def makesolset(MS, data, solset_name): - solset = data.makeSolset(solset_name) + solset = data.makeSolset(solset_name) - logger.info('Collecting information from the ANTENNA table.') + logger.info("Collecting information from the ANTENNA table.") antennaTable = pt.table(MS + "::ANTENNA", ack=False) - antennaNames = antennaTable.getcol('NAME') - antennaPositions = antennaTable.getcol('POSITION') + antennaNames = antennaTable.getcol("NAME") + antennaPositions = antennaTable.getcol("POSITION") antennaTable.close() - antennaTable = solset.obj._f_get_child('antenna') - antennaTable.append(list(zip(*(antennaNames,antennaPositions)))) - - logger.info('Collecting information from the FIELD table.') + antennaTable = solset.obj._f_get_child("antenna") + antennaTable.append(list(zip(*(antennaNames, antennaPositions)))) + + logger.info("Collecting information from the FIELD table.") fieldTable = pt.table(MS + "::FIELD", ack=False) - phaseDir = fieldTable.getcol('PHASE_DIR') + phaseDir = fieldTable.getcol("PHASE_DIR") pointing = phaseDir[0, 0, :] fieldTable.close() - sourceTable = solset.obj._f_get_child('source') + sourceTable = solset.obj._f_get_child("source") # add the field centre, that is also the direction for Gain and Common* - sourceTable.append([('pointing',pointing)]) + sourceTable.append([("pointing", pointing)]) + +def createRMh5parm( + MSfiles, + h5parmdb, + solset_name="sol000", + all_stations=True, + timestepRM=300, + ionex_server="ftp://ftp.aiub.unibe.ch/CODE/", + ionex_prefix="CODG", + ionexPath="./", + earth_rot=0, + proxyServer=None, + proxyPort=None, + proxyType=None, + proxyUser=None, + proxyPass=None, +): + """Add rotation measure to existing h5parmdb -def createRMh5parm(MSfiles, h5parmdb, solset_name = "sol000",all_stations=True,timestepRM=300, - ionex_server="ftp://ftp.aiub.unibe.ch/CODE/", - ionex_prefix='CODG',ionexPath="./",earth_rot=0,proxyServer=None,proxyPort=None,proxyType=None,proxyUser=None,proxyPass=None): - '''Add rotation measure to existing h5parmdb - Args: - MSfiles (string) : path + filename of Measurement Set + MSfiles (string) : path + filename of Measurement Set h5parmdb (string) : name of existing h5parm - solset_name (string) : optional name of solset in h5parmdb, + solset_name (string) : optional name of solset in h5parmdb, if not set, first one will be chosen all_stations (bool) : optional calculate RM values for all stations in the MS,' - default only for position of CS002LBA + default only for position of CS002LBA timestep (float) : timestep in seconds ionex_server (string) : ftp server for IONEX files ionex_prefix (string) : prefix of IONEX files @@ -66,192 +78,293 @@ def createRMh5parm(MSfiles, h5parmdb, solset_name = "sol000",all_stations=True,t proxytype (str): Type of the proxy server to use proxyuser (str): Username of the proxy server to use proxypass (str): Password of the proxy server to use - ''' - + """ + try: - mslist = MSfiles.lstrip('[').rstrip(']').replace(' ','').replace("'","").split(',') + mslist = ( + MSfiles.lstrip("[").rstrip("]").replace(" ", "").replace("'", "").split(",") + ) except AttributeError: mslist = MSfiles - + if len(mslist) == 0: raise ValueError("Did not find any existing directory in input MS list!") pass else: MS = mslist[0] pass - + if not os.path.exists(h5parmdb): - logger.error('Could not find h5parmdb: ' + h5parmdb) - return(1) - - data = h5parm(h5parmdb, readonly=False) - if not solset_name in data.getSolsetNames(): - makesolset(MS,data,solset_name) - solset = data.getSolset(solset_name) - soltabs = solset.getSoltabs() + logger.error("Could not find h5parmdb: " + h5parmdb) + return 1 + + data = h5parm(h5parmdb, readonly=False) + if solset_name not in data.getSolsetNames(): + makesolset(MS, data, solset_name) + solset = data.getSolset(solset_name) + soltabs = solset.getSoltabs() station_names = sorted(solset.getAnt().keys()) - if 'RMextract' in [s.name for s in soltabs]: - logger.warning('Soltab RMextract exists already. Skipping...') - return(0) - - #extract the timerange information - (timerange,timestep,pointing,stat_names,stat_pos) = PosTools.getMSinfo(MS) + if "RMextract" in [s.name for s in soltabs]: + logger.warning("Soltab RMextract exists already. Skipping...") + return 0 + + # extract the timerange information + (timerange, timestep, pointing, stat_names, stat_pos) = PosTools.getMSinfo(MS) start_time = timerange[0] end_time = timerange[1] timerange[0] = start_time - timestep timerange[1] = end_time + timestep - times,timerange = PosTools.getIONEXtimerange(timerange, timestep) + times, timerange = PosTools.getIONEXtimerange(timerange, timestep) if len(times[-1]) == 0 or times[-1][-1] < timerange[1]: timestmp = list(times[-1]) - timestmp.append(timerange[1]) #add one extra step to make sure you have a value for all times in the MS in case timestep hase been changed + timestmp.append( + timerange[1] + ) # add one extra step to make sure you have a value for all times in the MS in case timestep hase been changed times[-1] = np.array(timestmp) - for time_array in times[::-1]: #check in reverse order, since datamight not be available for latest days + for time_array in times[ + ::-1 + ]: # check in reverse order, since datamight not be available for latest days starttime = time_array[0] date_parms = PosTools.obtain_observation_year_month_day_fraction(starttime) if not proxyServer: - if not "http" in ionex_server: #ftp server use ftplib - ionexf = ionex.getIONEXfile(time=date_parms, - server = ionex_server, - prefix = ionex_prefix, - outpath = ionexPath) + if "http" not in ionex_server: # ftp server use ftplib + ionexf = ionex.getIONEXfile( + time=date_parms, + server=ionex_server, + prefix=ionex_prefix, + outpath=ionexPath, + ) else: - ionexf = ionex.get_urllib_IONEXfile(time = date_parms, - server = ionex_server, - prefix = ionex_prefix, - outpath = ionexPath) - + ionexf = ionex.get_urllib_IONEXfile( + time=date_parms, + server=ionex_server, + prefix=ionex_prefix, + outpath=ionexPath, + ) + else: - ionexf = ionex.get_urllib_IONEXfile(time = date_parms, - server = ionex_server, - prefix = ionex_prefix, - outpath = ionexPath, - proxy_server = proxyServer, - proxy_type = proxyType, - proxy_port = proxyPort, - proxy_user = proxyUser, - proxy_pass = proxyPass) + ionexf = ionex.get_urllib_IONEXfile( + time=date_parms, + server=ionex_server, + prefix=ionex_prefix, + outpath=ionexPath, + proxy_server=proxyServer, + proxy_type=proxyType, + proxy_port=proxyPort, + proxy_user=proxyUser, + proxy_pass=proxyPass, + ) if ionexf == -1: - if not "igsiono.uwm.edu.pl" in ionex_server: + if "igsiono.uwm.edu.pl" not in ionex_server: logger.info("cannot get IONEX data, try fast product server instead") if not proxyServer: - ionexf = ionex.get_urllib_IONEXfile(time = date_parms, - server = "https://igsiono.uwm.edu.pl", - prefix = "igrg", - outpath = ionexPath) + ionexf = ionex.get_urllib_IONEXfile( + time=date_parms, + server="https://igsiono.uwm.edu.pl", + prefix="igrg", + outpath=ionexPath, + ) else: - ionexf = ionex.get_urllib_IONEXfile(time = date_parms, - server = "https://igsiono.uwm.edu.pl", - prefix = "igrg", - outpath = ionexPath, - proxy_server = proxyServer, - proxy_type = proxyType, - proxy_port = proxyPort, - proxy_user = proxyUser, - proxy_pass = proxyPass) + ionexf = ionex.get_urllib_IONEXfile( + time=date_parms, + server="https://igsiono.uwm.edu.pl", + prefix="igrg", + outpath=ionexPath, + proxy_server=proxyServer, + proxy_type=proxyType, + proxy_port=proxyPort, + proxy_user=proxyUser, + proxy_pass=proxyPass, + ) if ionexf == -1: logger.error("IONEX data not available, even not from fast product server") - return(-1) - - + return -1 + if not proxyServer: - rmdict = getRM.getRM(MS, - server = ionex_server, - prefix = ionex_prefix, - ionexPath = ionexPath, - timestep = timestepRM, - earth_rot = earth_rot) + rmdict = getRM.getRM( + MS, + server=ionex_server, + prefix=ionex_prefix, + ionexPath=ionexPath, + timestep=timestepRM, + earth_rot=earth_rot, + ) else: - rmdict = getRM.getRM(MS, - server = ionex_server, - prefix = ionex_prefix, - ionexPath = ionexPath, - timestep = timestepRM, - earth_rot = earth_rot, - proxy_server = proxyServer, - proxy_type = proxyType, - proxy_port = proxyPort, - proxy_user = proxyUser, - proxy_pass = proxyPass) - - + rmdict = getRM.getRM( + MS, + server=ionex_server, + prefix=ionex_prefix, + ionexPath=ionexPath, + timestep=timestepRM, + earth_rot=earth_rot, + proxy_server=proxyServer, + proxy_type=proxyType, + proxy_port=proxyPort, + proxy_user=proxyUser, + proxy_pass=proxyPass, + ) + if not rmdict: if not ionex_server: - raise ValueError("One or more IONEX files is not found on disk and download is disabled!\n" - "(You can run \"bin/download_IONEX.py\" outside the pipeline if needed.)") + raise ValueError( + "One or more IONEX files is not found on disk and download is disabled!\n" + '(You can run "bin/download_IONEX.py" outside the pipeline if needed.)' + ) else: - raise ValueError("Couldn't get RM information from RMextract! (But I don't know why.)") - - logger.info('Adding rotation measure values to: ' + solset_name + ' of ' + h5parmdb) + raise ValueError( + "Couldn't get RM information from RMextract! (But I don't know why.)" + ) + + logger.info("Adding rotation measure values to: " + solset_name + " of " + h5parmdb) if all_stations: if type(list(station_names)[0]) != str: - rm_vals = np.array([rmdict["RM"][stat.decode()].flatten() for stat in station_names]) + rm_vals = np.array( + [rmdict["RM"][stat.decode()].flatten() for stat in station_names] + ) else: rm_vals = np.array([rmdict["RM"][stat].flatten() for stat in station_names]) else: - rm_vals = np.ones((len(station_names),rmdict['RM']['st0'].shape[0]),dtype=float) - rm_vals += rmdict['RM']['st0'].flatten()[np.newaxis] - - new_soltab = solset.makeSoltab(soltype='rotationmeasure', soltabName='RMextract', - axesNames=['ant', 'time'], axesVals=[station_names, rmdict['times']], - vals=rm_vals, - weights=np.ones_like(rm_vals, dtype=np.float16)) + rm_vals = np.ones( + (len(station_names), rmdict["RM"]["st0"].shape[0]), dtype=float + ) + rm_vals += rmdict["RM"]["st0"].flatten()[np.newaxis] + + new_soltab = solset.makeSoltab( + soltype="rotationmeasure", + soltabName="RMextract", + axesNames=["ant", "time"], + axesVals=[station_names, rmdict["times"]], + vals=rm_vals, + weights=np.ones_like(rm_vals, dtype=np.float16), + ) - - return(0) + return 0 data.close() - ######################################################################## + + def main(): - parser = argparse.ArgumentParser(description='Adds CommonRotationAngle to an H5parm from RMextract.') - - parser.add_argument('MSfiles', type=str, nargs='+', - help='MS for which the parmdb should be created.') - parser.add_argument('h5parm', type=str, - help='H5parm to which the results of the CommonRotationAngle is added.') - parser.add_argument('--server', type=str, default='ftp://ftp.aiub.unibe.ch/CODE/', - help='URL of the server to use. (default: ftp://ftp.aiub.unibe.ch/CODE/)') - parser.add_argument('--prefix', type=str, default='CODG', - help='Prefix of the IONEX files. (default: \"CODG\")') - parser.add_argument('--ionexpath', '--path', type=str, default='./', - help='Directory where to store the IONEX files. (default: \"./\")') - parser.add_argument('--solsetName', '--solset', type=str, default='sol000', - help='Name of the h5parm solution set (default: sol000)') - parser.add_argument('--single','-s', help= - 'calculate RM only for CS002LBA (default calculate for all stations in the MS)', - action='store_false',dest="allStations") - parser.add_argument('-t','--timestep', help= - 'timestep in seconds. for values <=0 (default) the timegrid of the MS is used ', - dest="timestep",type=float, default=300.) - parser.add_argument('-e','--smart_interpol', type=float, default=0, help= - 'float parameter describing how much of Earth rotation is taken in to account \ + parser = argparse.ArgumentParser( + description="Adds CommonRotationAngle to an H5parm from RMextract." + ) + + parser.add_argument( + "MSfiles", + type=str, + nargs="+", + help="MS for which the parmdb should be created.", + ) + parser.add_argument( + "h5parm", + type=str, + help="H5parm to which the results of the CommonRotationAngle is added.", + ) + parser.add_argument( + "--server", + type=str, + default="ftp://ftp.aiub.unibe.ch/CODE/", + help="URL of the server to use. (default: ftp://ftp.aiub.unibe.ch/CODE/)", + ) + parser.add_argument( + "--prefix", + type=str, + default="CODG", + help='Prefix of the IONEX files. (default: "CODG")', + ) + parser.add_argument( + "--ionexpath", + "--path", + type=str, + default="./", + help='Directory where to store the IONEX files. (default: "./")', + ) + parser.add_argument( + "--solsetName", + "--solset", + type=str, + default="sol000", + help="Name of the h5parm solution set (default: sol000)", + ) + parser.add_argument( + "--single", + "-s", + help="calculate RM only for CS002LBA (default calculate for all stations in the MS)", + action="store_false", + dest="allStations", + ) + parser.add_argument( + "-t", + "--timestep", + help="timestep in seconds. for values <=0 (default) the timegrid of the MS is used ", + dest="timestep", + type=float, + default=300.0, + ) + parser.add_argument( + "-e", + "--smart_interpol", + type=float, + default=0, + help="float parameter describing how much of Earth rotation is taken in to account \ in interpolation of the IONEX files. 1.0 means time interpolation assumes \ ionosphere rotates in opposite direction of the Earth. 0.0 (default) means \ - no rotation applied',dest="earth_rot",) - parser.add_argument('--proxyserver', type=str, default=None, - help='Name of a proxy server to use (default: None)') - parser.add_argument('--proxyport', type=int, default=None, - help='Name of a proxy server port to use (default: None)') - parser.add_argument('--proxytype', type=str, default=None, - help='Name of a proxy server type to use (default: None)') - parser.add_argument('--proxyuser', type=str, default=None, - help='Name of a proxy server user to use (default: None)') - parser.add_argument('--proxypass', type=str, default=None, - help='Password of the proxy server user to use (default: None)') - + no rotation applied", + dest="earth_rot", + ) + parser.add_argument( + "--proxyserver", + type=str, + default=None, + help="Name of a proxy server to use (default: None)", + ) + parser.add_argument( + "--proxyport", + type=int, + default=None, + help="Name of a proxy server port to use (default: None)", + ) + parser.add_argument( + "--proxytype", + type=str, + default=None, + help="Name of a proxy server type to use (default: None)", + ) + parser.add_argument( + "--proxyuser", + type=str, + default=None, + help="Name of a proxy server user to use (default: None)", + ) + parser.add_argument( + "--proxypass", + type=str, + default=None, + help="Password of the proxy server user to use (default: None)", + ) args = parser.parse_args() MS = args.MSfiles h5parmdb = args.h5parm logger.info("Working on: %s %s" % (MS, h5parmdb)) - createRMh5parm(MS, h5parmdb, ionex_server=args.server, ionex_prefix=args.prefix, - ionexPath=args.ionexpath, solset_name=args.solsetName, - all_stations=args.allStations, timestepRM=args.timestep, - earth_rot=args.earth_rot, proxyServer=args.proxyserver, proxyPort=args.proxyport, - proxyType=args.proxytype,proxyUser=args.proxyuser,proxyPass=args.proxypass) - + createRMh5parm( + MS, + h5parmdb, + ionex_server=args.server, + ionex_prefix=args.prefix, + ionexPath=args.ionexpath, + solset_name=args.solsetName, + all_stations=args.allStations, + timestepRM=args.timestep, + earth_rot=args.earth_rot, + proxyServer=args.proxyserver, + proxyPort=args.proxyport, + proxyType=args.proxytype, + proxyUser=args.proxyuser, + proxyPass=args.proxypass, + ) diff --git a/RMextract/LOFAR_TOOLS/download_IONEX.py b/RMextract/LOFAR_TOOLS/download_IONEX.py index 80e227b..175c064 100644 --- a/RMextract/LOFAR_TOOLS/download_IONEX.py +++ b/RMextract/LOFAR_TOOLS/download_IONEX.py @@ -1,6 +1,4 @@ import argparse -import logging -import sys import numpy as np @@ -9,48 +7,78 @@ def main(): - parser = argparse.ArgumentParser(description='Downloads relevant IONEX files for a given MS') - parser.add_argument('MSfiles', type=str, - help='MS for which the parmdb should be created.') - parser.add_argument('--server', type=str, default='ftp://ftp.aiub.unibe.ch/CODE/', - help='URL of the server to use. (default: ftp://ftp.aiub.unibe.ch/CODE/)') - parser.add_argument('--prefix', type=str, default='CODG', - help='Prefix of the IONEX files. (default: \"CODG\")') - parser.add_argument('--ionexpath', '--path', type=str, default='IONEXdata/', - help='Directory where to store the IONEX files. (default: \"IONEXdata/\")') + parser = argparse.ArgumentParser( + description="Downloads relevant IONEX files for a given MS" + ) + parser.add_argument( + "MSfiles", type=str, help="MS for which the parmdb should be created." + ) + parser.add_argument( + "--server", + type=str, + default="ftp://ftp.aiub.unibe.ch/CODE/", + help="URL of the server to use. (default: ftp://ftp.aiub.unibe.ch/CODE/)", + ) + parser.add_argument( + "--prefix", + type=str, + default="CODG", + help='Prefix of the IONEX files. (default: "CODG")', + ) + parser.add_argument( + "--ionexpath", + "--path", + type=str, + default="IONEXdata/", + help='Directory where to store the IONEX files. (default: "IONEXdata/")', + ) args = parser.parse_args() - MS=args.MSfiles - server=args.server - prefix=args.prefix - (timerange,timestep,pointing,stat_names,stat_pos)=PosTools.getMSinfo(MS) - + MS = args.MSfiles + server = args.server + prefix = args.prefix + (timerange, timestep, pointing, stat_names, stat_pos) = PosTools.getMSinfo(MS) + start_time = timerange[0] end_time = timerange[1] timerange[0] = start_time - timestep timerange[1] = end_time + timestep - times,timerange=PosTools.getIONEXtimerange(timerange,timestep) - if len(times[-1])==0 or times[-1][-1]2): - if((year&0x3)==0): - if((year % 100 != 0) or (year % 400 == 0)): - doy = doy+1 + day_of_year_list = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334] + doy = day_of_year_list[month - 1] + day + if month > 2: + if (year & 0x3) == 0: + if (year % 100 != 0) or (year % 400 == 0): + doy = doy + 1 return doy + + ################ from JMA_tools in ALBUS ######################## def get_ymdf_from_JD(JD): """get the year, month, day, day_fraction from an MJD -Taken from _Astronomical Algorithms_, Meeus, 1991 + Taken from _Astronomical Algorithms_, Meeus, 1991 """ JD2 = JD + 0.5 Z = int(JD2) F = JD2 - Z A = Z - if(Z>= 2299161): - alpha = int((Z-1867216.25)/36524.25) - A = Z + 1 + alpha - int(alpha/4) + if Z >= 2299161: + alpha = int((Z - 1867216.25) / 36524.25) + A = Z + 1 + alpha - int(alpha / 4) B = A + 1524 - C = int((B-122.1)/365.25) - D = int(365.25*C) - E = int((B-D)/30.6001) - day_total = B - D - int(30.6001*E) + F + C = int((B - 122.1) / 365.25) + D = int(365.25 * C) + E = int((B - D) / 30.6001) + day_total = B - D - int(30.6001 * E) + F month = E - 1 - if(E >= 14): month = E - 13 + if E >= 14: + month = E - 13 year = C - 4716 - if(month <= 2): year += 1 + if month <= 2: + year += 1 day = int(day_total) day_fraction = day_total - day return year, month, day, day_fraction + ################################################################################ def get_hms_from_frac(day_fraction): """get hours, minues, seconds from a fractional day. Does not worry about leap seconds. """ h = day_fraction * 24.0 - hour = int(h+2E-13) + hour = int(h + 2e-13) m = (h - hour) * 60.0 - minute = int(m+1E-11) + minute = int(m + 1e-11) second = (m - minute) * 60.0 return hour, minute, second ################################################################################ def get_ymdh_from_JD(JD): - """get hours, minues, seconds from a fractional day. -""" + """get hours, minues, seconds from a fractional day.""" year, month, day, day_fraction = get_ymdf_from_JD(JD) hour, minute, second = get_hms_from_frac(day_fraction) return year, month, day, hour, minute, second + ################################################################################ def obtain_observation_year_month_day_fraction(start_time): julian_day = (start_time / 86400.0) + 2400000.5 result = get_ymdf_from_JD(julian_day) return result + ################################################################################ # Get the day of year from the Year, month, day for the start of observations def obtain_observation_year_month_day_hms(start_time): if HAS_PYRAP: - #print ("getting time", str(start_time)+'s') - date_list = qu.quantity(str(start_time)+'s').formatted("YMD").split("/") + # print ("getting time", str(start_time)+'s') + date_list = qu.quantity(str(start_time) + "s").formatted("YMD").split("/") year = int(date_list[0]) month = int(date_list[1]) day = int(date_list[2]) - time_list=date_list[3].split(":") - return (year, month, day,int(time_list[0]),int(time_list[1]),float(time_list[2])) + time_list = date_list[3].split(":") + return ( + year, + month, + day, + int(time_list[0]), + int(time_list[1]), + float(time_list[2]), + ) else: julian_day = (start_time / 86400.0) + 2400000.5 - year, month, day, hour, minute, second = get_ymdh_from_JD(julian_day) - return (year, month, day,hour, minute, second) - - - + year, month, day, hour, minute, second = get_ymdh_from_JD(julian_day) + return (year, month, day, hour, minute, second) def getMSinfo(MS=None): if MS is None: - print ("No measurement set given") + print("No measurement set given") return if not HAS_PYRAP: - print ("Install pyrap to be able to extract info from MS") + print("Install pyrap to be able to extract info from MS") return - if os.path.isdir(MS): - myMS=tab.table(MS) + myMS = tab.table(MS) else: - print ("Do not understand the format of MS",MS,"bailing out") + print("Do not understand the format of MS", MS, "bailing out") return - timerange=[np.amin(myMS.getcol('TIME_CENTROID')),np.amax(myMS.getcol('TIME_CENTROID'))] - timestep=myMS.getcell('INTERVAL',0) - - pointing= tab.table(myMS.getkeyword('FIELD')).getcell('PHASE_DIR',0) - stations = tab.table(myMS.getkeyword('ANTENNA')).getcol('NAME') - station_pos = tab.table(myMS.getkeyword('ANTENNA')).getcol('POSITION') - - return (timerange,timestep,pointing.flatten(),stations,station_pos) - - -def getPPsimple(height=[ION_HEIGHT,],mPosition=[0.,0.,0.],direction=[0.,0.,0.]): - '''get piercepoints for antenna position mPosition in m, direction ITRF in m on unit sphere and for array of heights, assuming a spherical Earth''' - height=np.array(height) - stX=mPosition[0] - stY=mPosition[1] - stZ=mPosition[2] - x=np.divide(stX,(R_earth+height)) - y=np.divide(stY,(R_earth+height)) - z=np.divide(stZ,(R_earth+height)) - - c = x*x + y*y + z*z - 1.0 - dx=np.divide(direction[0],(R_earth+height)) - dy=np.divide(direction[1],(R_earth+height)) - dz=np.divide(direction[2],(R_earth+height)) - - a = dx*dx + dy*dy + dz*dz - b = x*dx + y*dy + z*dz - - alpha = (-b + np.sqrt(b*b - a*c))/a - - - pp=np.zeros(height.shape+(3,)) - pp[:,0]=stX+alpha*direction[0] - pp[:,1]=stY+alpha*direction[1] - pp[:,2]=stZ+alpha*direction[2] - - am=np.divide(1.,pp[:,0]*dx+pp[:,1]*dy+pp[:,2]*dz) - return pp,am - -def getPPsimpleAngle(height=[ION_HEIGHT,],mPosition=[0.,0.,0.],direction=[0.,0.,0.]): - '''get (lon,lat,h values) of piercepoints for antenna position mPosition in m, direction ITRF in m on unit sphere and for array of heights, assuming a spherical Earth''' - height=np.array(height) - stX=mPosition[0] - stY=mPosition[1] - stZ=mPosition[2] - x=np.divide(stX,(R_earth+height)) - y=np.divide(stY,(R_earth+height)) - z=np.divide(stZ,(R_earth+height)) - - c = x*x + y*y + z*z - 1.0 - dx=np.divide(direction[0],(R_earth+height)) - dy=np.divide(direction[1],(R_earth+height)) - dz=np.divide(direction[2],(R_earth+height)) - - a = dx*dx + dy*dy + dz*dz - b = x*dx + y*dy + z*dz - - alpha = (-b + np.sqrt(b*b - a*c))/a - - - pp=np.zeros(height.shape+(3,)) - pp[:,0]=stX+alpha*direction[0] - pp[:,1]=stY+alpha*direction[1] - pp[:,2]=stZ+alpha*direction[2] - - am=np.divide(1.,pp[:,0]*dx+pp[:,1]*dy+pp[:,2]*dz) - - ppl=np.zeros(height.shape+(3,)) - ppl[:,0]=np.arctan2(pp[:,1],pp[:,0]) - ppl[:,1]=np.arctan2(pp[:,2],np.sqrt(pp[:,0]*pp[:,0]+pp[:,1]*pp[:,1])) - ppl[:,2]=height - - return ppl,am - - -def getPP(h=ION_HEIGHT,mPosition=[0.,0.,0.],direction=[0.,0.,0.]): + timerange = [ + np.amin(myMS.getcol("TIME_CENTROID")), + np.amax(myMS.getcol("TIME_CENTROID")), + ] + timestep = myMS.getcell("INTERVAL", 0) + + pointing = tab.table(myMS.getkeyword("FIELD")).getcell("PHASE_DIR", 0) + stations = tab.table(myMS.getkeyword("ANTENNA")).getcol("NAME") + station_pos = tab.table(myMS.getkeyword("ANTENNA")).getcol("POSITION") + + return (timerange, timestep, pointing.flatten(), stations, station_pos) + + +def getPPsimple( + height=[ + ION_HEIGHT, + ], + mPosition=[0.0, 0.0, 0.0], + direction=[0.0, 0.0, 0.0], +): + """get piercepoints for antenna position mPosition in m, direction ITRF in m on unit sphere and for array of heights, assuming a spherical Earth""" + height = np.array(height) + stX = mPosition[0] + stY = mPosition[1] + stZ = mPosition[2] + x = np.divide(stX, (R_earth + height)) + y = np.divide(stY, (R_earth + height)) + z = np.divide(stZ, (R_earth + height)) + + c = x * x + y * y + z * z - 1.0 + dx = np.divide(direction[0], (R_earth + height)) + dy = np.divide(direction[1], (R_earth + height)) + dz = np.divide(direction[2], (R_earth + height)) + + a = dx * dx + dy * dy + dz * dz + b = x * dx + y * dy + z * dz + + alpha = (-b + np.sqrt(b * b - a * c)) / a + + pp = np.zeros(height.shape + (3,)) + pp[:, 0] = stX + alpha * direction[0] + pp[:, 1] = stY + alpha * direction[1] + pp[:, 2] = stZ + alpha * direction[2] + + am = np.divide(1.0, pp[:, 0] * dx + pp[:, 1] * dy + pp[:, 2] * dz) + return pp, am + + +def getPPsimpleAngle( + height=[ + ION_HEIGHT, + ], + mPosition=[0.0, 0.0, 0.0], + direction=[0.0, 0.0, 0.0], +): + """get (lon,lat,h values) of piercepoints for antenna position mPosition in m, direction ITRF in m on unit sphere and for array of heights, assuming a spherical Earth""" + height = np.array(height) + stX = mPosition[0] + stY = mPosition[1] + stZ = mPosition[2] + x = np.divide(stX, (R_earth + height)) + y = np.divide(stY, (R_earth + height)) + z = np.divide(stZ, (R_earth + height)) + + c = x * x + y * y + z * z - 1.0 + dx = np.divide(direction[0], (R_earth + height)) + dy = np.divide(direction[1], (R_earth + height)) + dz = np.divide(direction[2], (R_earth + height)) + + a = dx * dx + dy * dy + dz * dz + b = x * dx + y * dy + z * dz + + alpha = (-b + np.sqrt(b * b - a * c)) / a + + pp = np.zeros(height.shape + (3,)) + pp[:, 0] = stX + alpha * direction[0] + pp[:, 1] = stY + alpha * direction[1] + pp[:, 2] = stZ + alpha * direction[2] + + am = np.divide(1.0, pp[:, 0] * dx + pp[:, 1] * dy + pp[:, 2] * dz) + + ppl = np.zeros(height.shape + (3,)) + ppl[:, 0] = np.arctan2(pp[:, 1], pp[:, 0]) + ppl[:, 1] = np.arctan2(pp[:, 2], np.sqrt(pp[:, 0] * pp[:, 0] + pp[:, 1] * pp[:, 1])) + ppl[:, 2] = height + + return ppl, am + + +def getPP(h=ION_HEIGHT, mPosition=[0.0, 0.0, 0.0], direction=[0.0, 0.0, 0.0]): stationX = mPosition[0] stationY = mPosition[1] stationZ = mPosition[2] @@ -307,200 +338,232 @@ def getPP(h=ION_HEIGHT,mPosition=[0.,0.,0.],direction=[0.,0.,0.]): ion_ellipsoid_a2_inv = 1.0 / (ion_ellipsoid_a * ion_ellipsoid_a) ion_ellipsoid_b = earth_ellipsoid_b + h ion_ellipsoid_b2_inv = 1.0 / (ion_ellipsoid_b * ion_ellipsoid_b) - - x = stationX/ion_ellipsoid_a - y = stationY/ion_ellipsoid_a - z = stationZ/ion_ellipsoid_b - c = x*x + y*y + z*z - 1.0 - - dx = direction [0]/ ion_ellipsoid_a - dy = direction [1] / ion_ellipsoid_a - dz = direction [2] / ion_ellipsoid_b - - a = dx*dx + dy*dy + dz*dz - b = x*dx + y*dy + z*dz - alpha = (-b + sqrt(b*b - a*c))/a - pp_x = stationX + alpha*direction[0] - pp_y = stationY + alpha*direction[1] - pp_z = stationZ + alpha*direction[2] + + x = stationX / ion_ellipsoid_a + y = stationY / ion_ellipsoid_a + z = stationZ / ion_ellipsoid_b + c = x * x + y * y + z * z - 1.0 + + dx = direction[0] / ion_ellipsoid_a + dy = direction[1] / ion_ellipsoid_a + dz = direction[2] / ion_ellipsoid_b + + a = dx * dx + dy * dy + dz * dz + b = x * dx + y * dy + z * dz + alpha = (-b + sqrt(b * b - a * c)) / a + pp_x = stationX + alpha * direction[0] + pp_y = stationY + alpha * direction[1] + pp_z = stationZ + alpha * direction[2] normal_x = pp_x * ion_ellipsoid_a2_inv normal_y = pp_y * ion_ellipsoid_a2_inv normal_z = pp_z * ion_ellipsoid_b2_inv - norm_normal2 = normal_x*normal_x + normal_y*normal_y + normal_z*normal_z + norm_normal2 = normal_x * normal_x + normal_y * normal_y + normal_z * normal_z norm_normal = sqrt(norm_normal2) - sin_lat2 = normal_z*normal_z / norm_normal2 + sin_lat2 = normal_z * normal_z / norm_normal2 - - g = 1.0 - earth_ellipsoid_e2*sin_lat2 + g = 1.0 - earth_ellipsoid_e2 * sin_lat2 sqrt_g = sqrt(g) - M = earth_ellipsoid_b2 / ( earth_ellipsoid_a * g * sqrt_g ) + M = earth_ellipsoid_b2 / (earth_ellipsoid_a * g * sqrt_g) N = earth_ellipsoid_a / sqrt_g - local_ion_ellipsoid_e2 = (M-N) / ((M+h)*sin_lat2 - N - h) - local_ion_ellipsoid_a = (N+h) * sqrt(1.0 - local_ion_ellipsoid_e2*sin_lat2) - local_ion_ellipsoid_b = local_ion_ellipsoid_a*sqrt(1.0 - local_ion_ellipsoid_e2) + local_ion_ellipsoid_e2 = (M - N) / ((M + h) * sin_lat2 - N - h) + local_ion_ellipsoid_a = (N + h) * sqrt(1.0 - local_ion_ellipsoid_e2 * sin_lat2) + local_ion_ellipsoid_b = local_ion_ellipsoid_a * sqrt(1.0 - local_ion_ellipsoid_e2) - z_offset = ((1.0-earth_ellipsoid_e2)*N + h - (1.0-local_ion_ellipsoid_e2)*(N+h)) * sqrt(sin_lat2) + z_offset = ( + (1.0 - earth_ellipsoid_e2) * N + h - (1.0 - local_ion_ellipsoid_e2) * (N + h) + ) * sqrt(sin_lat2) - x1 = stationX/local_ion_ellipsoid_a - y1 = stationY/local_ion_ellipsoid_a - z1 = (stationZ-z_offset)/local_ion_ellipsoid_b - c1 = x1*x1 + y1*y1 + z1*z1 - 1.0 + x1 = stationX / local_ion_ellipsoid_a + y1 = stationY / local_ion_ellipsoid_a + z1 = (stationZ - z_offset) / local_ion_ellipsoid_b + c1 = x1 * x1 + y1 * y1 + z1 * z1 - 1.0 dx = direction[0] / local_ion_ellipsoid_a dy = direction[1] / local_ion_ellipsoid_a dz = direction[2] / local_ion_ellipsoid_b - a = dx*dx + dy*dy + dz*dz - b = x1*dx + y1*dy + z1*dz - alpha = (-b + sqrt(b*b - a*c1))/a + a = dx * dx + dy * dy + dz * dz + b = x1 * dx + y1 * dy + z1 * dz + alpha = (-b + sqrt(b * b - a * c1)) / a - pp_x = stationX + alpha*direction[0] - pp_y = stationY + alpha*direction[1] - pp_z = stationZ + alpha*direction[2] + pp_x = stationX + alpha * direction[0] + pp_y = stationY + alpha * direction[1] + pp_z = stationZ + alpha * direction[2] normal_x = pp_x / (local_ion_ellipsoid_a * local_ion_ellipsoid_a) normal_y = pp_y / (local_ion_ellipsoid_a * local_ion_ellipsoid_a) - normal_z = (pp_z-z_offset) / (local_ion_ellipsoid_b * local_ion_ellipsoid_b) + normal_z = (pp_z - z_offset) / (local_ion_ellipsoid_b * local_ion_ellipsoid_b) - norm_normal2 = normal_x*normal_x + normal_y*normal_y + normal_z*normal_z + norm_normal2 = normal_x * normal_x + normal_y * normal_y + normal_z * normal_z norm_normal = sqrt(norm_normal2) - - pp_airmass = norm_normal / (direction[0]*normal_x + direction[1]*normal_y + direction[2]*normal_z) - return (pp_x,pp_y,pp_z,pp_airmass) + pp_airmass = norm_normal / ( + direction[0] * normal_x + direction[1] * normal_y + direction[2] * normal_z + ) + + return (pp_x, pp_y, pp_z, pp_airmass) def getLonLat(pos): - #converts ITRF pos in xyz to lon lat - me=measures() - a=me.measure(me.position('ITRF',str(pos[0])+'m',str(pos[1])+'m',str(pos[2])+'m'),"ITRF") - return (a['m0']['value'],a['m1']['value']) - -def getLonLatStation(az=0,el=0,pos=posCS002): - #gets converts local station direction to ITRF lon/lat - if not isinstance(az,str): - az=str(az)+'rad' - if not isinstance(el,str): - el=str(el)+'rad' - me=measures() - me.do_frame(me.position('ITRF',str(pos[0])+'m',str(pos[1])+'m',str(pos[2])+'m')) - #me.do_frame(me.epoch('utc', 'today')) - direction=me.direction("AZELGEO",az,el) - return me.measure(direction,"ITRF") - - -def radec2azel(ra,dec,time, pos): - me=measures() - if type(ra)!=str: - ra=str(ra)+'rad' - if type(dec)!=str: - dec=str(dec)+'rad' - phasedir=me.direction('J2000',ra,dec) - t=me.epoch("UTC",qu.quantity(time)) + # converts ITRF pos in xyz to lon lat + me = measures() + a = me.measure( + me.position("ITRF", str(pos[0]) + "m", str(pos[1]) + "m", str(pos[2]) + "m"), + "ITRF", + ) + return (a["m0"]["value"], a["m1"]["value"]) + + +def getLonLatStation(az=0, el=0, pos=posCS002): + # gets converts local station direction to ITRF lon/lat + if not isinstance(az, str): + az = str(az) + "rad" + if not isinstance(el, str): + el = str(el) + "rad" + me = measures() + me.do_frame( + me.position("ITRF", str(pos[0]) + "m", str(pos[1]) + "m", str(pos[2]) + "m") + ) + # me.do_frame(me.epoch('utc', 'today')) + direction = me.direction("AZELGEO", az, el) + return me.measure(direction, "ITRF") + + +def radec2azel(ra, dec, time, pos): + me = measures() + if type(ra) != str: + ra = str(ra) + "rad" + if type(dec) != str: + dec = str(dec) + "rad" + phasedir = me.direction("J2000", ra, dec) + t = me.epoch("UTC", qu.quantity(time)) me.do_frame(t) - p = me.position('ITRF',str(pos[0])+'m',str(pos[1])+'m',str(pos[2])+'m') + p = me.position("ITRF", str(pos[0]) + "m", str(pos[1]) + "m", str(pos[2]) + "m") me.do_frame(p) - #print ("input radec2azel",phasedir,ra,dec,p,t) - azel = me.measure(phasedir,'AZELGEO') + # print ("input radec2azel",phasedir,ra,dec,p,t) + azel = me.measure(phasedir, "AZELGEO") return azel -def azel2radec(az,el,time, pos): - me=measures() - if type(az)!=str: - az=str(az)+'rad' - if type(el)!=str: - el=str(el)+'rad' - phasedir=me.direction('AZELGEO',az,el) - t=me.epoch("UTC",qu.quantity(time)) + +def azel2radec(az, el, time, pos): + me = measures() + if type(az) != str: + az = str(az) + "rad" + if type(el) != str: + el = str(el) + "rad" + phasedir = me.direction("AZELGEO", az, el) + t = me.epoch("UTC", qu.quantity(time)) me.do_frame(t) - p = me.position('ITRF',str(pos[0])+'m',str(pos[1])+'m',str(pos[2])+'m') + p = me.position("ITRF", str(pos[0]) + "m", str(pos[1]) + "m", str(pos[2]) + "m") me.do_frame(p) - radec = me.measure(phasedir,'RADEC') + radec = me.measure(phasedir, "RADEC") return radec -def getuvw(ra,dec,time, pos1,pos2): - me=measures() - if type(ra)!=str: - ra=str(ra)+'rad' - if type(dec)!=str: - dec=str(dec)+'rad' - phasedir=me.direction('J2000',ra,dec) +def getuvw(ra, dec, time, pos1, pos2): + me = measures() + if type(ra) != str: + ra = str(ra) + "rad" + if type(dec) != str: + dec = str(dec) + "rad" + phasedir = me.direction("J2000", ra, dec) me.do_frame(phasedir) - t=me.epoch("UTC",qu.quantity(time)) + t = me.epoch("UTC", qu.quantity(time)) me.do_frame(t) - - p = me.position('ITRF',str(pos1[0])+'m',str(pos1[1])+'m',str(pos1[2])+'m') - bl = me.baseline('ITRF',str(pos2[0]-pos1[0])+'m',str(pos2[1]-pos1[1])+'m',str(pos2[2]-pos1[2])+'m') - #print (bl) + + p = me.position("ITRF", str(pos1[0]) + "m", str(pos1[1]) + "m", str(pos1[2]) + "m") + bl = me.baseline( + "ITRF", + str(pos2[0] - pos1[0]) + "m", + str(pos2[1] - pos1[1]) + "m", + str(pos2[2] - pos1[2]) + "m", + ) + # print (bl) me.do_frame(p) - #print (me.to_uvw(bl)['xyz']) - #return uvw - -def getIONEXtimerange(timerange,timestep): - #IONEX files go per day, check if more than one file is needed. - times=[] - oldtimerange=-100 - while timerange[0]< timerange[1] and timerange[0]>oldtimerange: - oldtimerange=timerange[0] - #print (timerange) - result = obtain_observation_year_month_day_fraction(timerange[0]) - part_of_day = result[3] - result2 = obtain_observation_year_month_day_fraction(timerange[1]) - if result2[2]==result[2]: #sameday - times.append(np.arange(timerange[0],timerange[1]+timestep,timestep)) #make sure to include the last timestep - else: - nr_remaining_seconds=(1.-part_of_day) * 24.0 * 60. * 60. - #print ("new day",nr_remaining_seconds) - times.append(np.arange(timerange[0],timerange[0]+nr_remaining_seconds,timestep)) - #print ("in postools",len(times),times[-1],timerange,nr_remaining_seconds,result2,result,times[-1][-1],part_of_day) - if len(times[-1]): - timerange[0]=times[-1][-1]+timestep - return times,timerange - -def getlonlatheight(az,el,position,h=ION_HEIGHT): + # print (me.to_uvw(bl)['xyz']) + # return uvw + + +def getIONEXtimerange(timerange, timestep): + # IONEX files go per day, check if more than one file is needed. + times = [] + oldtimerange = -100 + while timerange[0] < timerange[1] and timerange[0] > oldtimerange: + oldtimerange = timerange[0] + # print (timerange) + result = obtain_observation_year_month_day_fraction(timerange[0]) + part_of_day = result[3] + result2 = obtain_observation_year_month_day_fraction(timerange[1]) + if result2[2] == result[2]: # sameday + times.append( + np.arange(timerange[0], timerange[1] + timestep, timestep) + ) # make sure to include the last timestep + else: + nr_remaining_seconds = (1.0 - part_of_day) * 24.0 * 60.0 * 60.0 + # print ("new day",nr_remaining_seconds) + times.append( + np.arange(timerange[0], timerange[0] + nr_remaining_seconds, timestep) + ) + # print ("in postools",len(times),times[-1],timerange,nr_remaining_seconds,result2,result,times[-1][-1],part_of_day) + if len(times[-1]): + timerange[0] = times[-1][-1] + timestep + return times, timerange + + +def getlonlatheight(az, el, position, h=ION_HEIGHT): if HAS_PYRAP: - lonlat=getLonLatStation(az,el,pos=position) - - lon=lonlat['m0']['value'] - lat=lonlat['m1']['value'] - # convert to itrf coordinates on sphere with radius 1 - diritrf=[cos(lat)*cos(lon),cos(lat)*sin(lon),sin(lat)] - # calculate piercepoint in xyz(code from Bas vd Tol) - - pos_pp = (ppx1,ppy1,ppz1,am1)=getPP(h=h,mPosition=position,direction=diritrf) - - #get pp in lon,lat h - me=measures() - pp1position=me.position("ITRF",str(ppx1)+'m',str(ppy1)+'m',str(ppz1)+'m') - - lonpp = degrees(pp1position['m0']['value']) - latpp = degrees(pp1position['m1']['value']) - height = pp1position['m2']['value'] / 1.0e3 + lonlat = getLonLatStation(az, el, pos=position) + + lon = lonlat["m0"]["value"] + lat = lonlat["m1"]["value"] + # convert to itrf coordinates on sphere with radius 1 + diritrf = [cos(lat) * cos(lon), cos(lat) * sin(lon), sin(lat)] + # calculate piercepoint in xyz(code from Bas vd Tol) + + pos_pp = (ppx1, ppy1, ppz1, am1) = getPP( + h=h, mPosition=position, direction=diritrf + ) + + # get pp in lon,lat h + me = measures() + pp1position = me.position( + "ITRF", str(ppx1) + "m", str(ppy1) + "m", str(ppz1) + "m" + ) + + lonpp = degrees(pp1position["m0"]["value"]) + latpp = degrees(pp1position["m1"]["value"]) + height = pp1position["m2"]["value"] / 1.0e3 elif HAS_EPHEM: - slantRange = 3.0e20 # seem to need a large value to - # get near the WNB measures equivalent - # lat,lon,ht = aer2ecef(degrees(body.az), degrees(body.alt), slantRange, degrees(geocentric_latitude), location_lon, ION_HEIGHT) - location_lat, location_lon, location_height = ITRFToWGS84(position[0], position[1], position[2]) - lat,lon,ht = aer2ecef(degrees(az), degrees(el), slantRange, location_lat, location_lon, ION_HEIGHT) - # convert to itrf coordinates on sphere with radius 1 - lat = radians(lat) - lon = radians(lon) - diritrf=[cos(lat)*cos(lon),cos(lat)*sin(lon),sin(lat)] - # calculate piercepoint in xyz(code from Bas vd Tol) - - pos_pp = (ppx1,ppy1,ppz1,am1)=getPP(h=ION_HEIGHT,mPosition=position,direction=diritrf) - #get pp in lon,lat h - latpp, lonpp, height = ITRFToWGS84(ppx1,ppy1,ppz1) + slantRange = 3.0e20 # seem to need a large value to + # get near the WNB measures equivalent + # lat,lon,ht = aer2ecef(degrees(body.az), degrees(body.alt), slantRange, degrees(geocentric_latitude), location_lon, ION_HEIGHT) + location_lat, location_lon, location_height = ITRFToWGS84( + position[0], position[1], position[2] + ) + lat, lon, ht = aer2ecef( + degrees(az), degrees(el), slantRange, location_lat, location_lon, ION_HEIGHT + ) + # convert to itrf coordinates on sphere with radius 1 + lat = radians(lat) + lon = radians(lon) + diritrf = [cos(lat) * cos(lon), cos(lat) * sin(lon), sin(lat)] + # calculate piercepoint in xyz(code from Bas vd Tol) + + pos_pp = (ppx1, ppy1, ppz1, am1) = getPP( + h=ION_HEIGHT, mPosition=position, direction=diritrf + ) + # get pp in lon,lat h + latpp, lonpp, height = ITRFToWGS84(ppx1, ppy1, ppz1) else: - print ('unable to compute position parameters - exiting!') - return -1,-1,-1 - return latpp, lonpp, height,lon,lat,am1 + print("unable to compute position parameters - exiting!") + return -1, -1, -1 + return latpp, lonpp, height, lon, lat, am1 + def far_to_near(altaz_far, distance, obstime=None): """Add distance to AltAz instance""" @@ -514,9 +577,14 @@ def far_to_near(altaz_far, distance, obstime=None): distance=distance, ) -def distance_from_height(obs_altaz, height_start=50., height_end = 20200., height_unit = u.km ): + +def distance_from_height( + obs_altaz, height_start=50.0, height_end=20200.0, height_unit=u.km +): """From an AltAz pointing, find the distance to where it crosses a plane 100 km above Earth""" - try_distances = np.linspace(height_start*0.7,2*obs_altaz.secz*height_end) * height_unit + try_distances = ( + np.linspace(height_start * 0.7, 2 * obs_altaz.secz * height_end) * height_unit + ) dummytime = Time.now() try_altaz = far_to_near(obs_altaz, try_distances, obstime=dummytime) try_heights = EarthLocation( @@ -534,133 +602,154 @@ def distance_from_height(obs_altaz, height_start=50., height_end = 20200., heigh f_dist_to_Rlocal = interpolate.interp1d( try_distances.to(u.km), try_heights.to(u.km).itrs.cartesian.norm() ) - return f_height_to_distance,f_dist_to_latpp,f_dist_to_lonpp, f_dist_to_Rlocal - -def getProfile(source_pos, stat_pos, time, h = np.arange(60,20200,10)*u.km): - '''Get profile of piercepoints through the atmosphere, given a station and source direction - - Args: - source_pos : SkyCoord or list(2) Ra,Dec J200 - stat_pos : EarthLocation or array(3) in m - time : Time or float (mjd) (can be an array) - h : array of heights - - Returns: - Tuple[ np.array, np.array, np.array, float, float, np.array ]: - - - ''' - # first calculate Az,El - if not type(stat_pos) is EarthLocation: - stat_pos = EarthLocation.from_geocentric(*list(stat_pos),unit=u.m) - if not type(source_pos) is SkyCoord: - source_pos = SkyCoord(source_pos[0],source_pos[1],unit=(u.hourangle,u.deg),frame = FK5) - if not type(time) is Time: - time = Time(time,format = 'mjd') - aa = AltAz(location = stat_pos, obstime = time) - azel = source_pos.transform_to(aa) - direction = azel.transform_to(ITRS) - londir = np.arctan2(direction.y.value,direction.x.value) - latdir = np.arcsin(direction.z.value) - - fh,flat,flon,fRloc = distance_from_height(azel,h[0].to(u.km).value,h[-1].to(u.km).value, u.km) - hdist = fh(h.to(u.km)) - latpp = flat(hdist) - lonpp = flon(hdist) - R_local = stat_pos.to(u.km).itrs.cartesian.norm().value - Rpp = fRloc(hdist) - #am = 1./((R_earthkm**2-hdist**2-(R_earthkm+h.to(u.km).value)**2)/(-2.*hdist*(R_earthkm+h.to(u.km).value))) - am = 1./((R_local**2-hdist**2-Rpp**2)/(-2.*hdist*Rpp)) - return latpp, lonpp, latdir, londir, am - - - -def getAzEl(pointing,time,position,ha_limit=-1000): + return f_height_to_distance, f_dist_to_latpp, f_dist_to_lonpp, f_dist_to_Rlocal + + +def getProfile(source_pos, stat_pos, time, h=np.arange(60, 20200, 10) * u.km): + """Get profile of piercepoints through the atmosphere, given a station and source direction + + Args: + source_pos : SkyCoord or list(2) Ra,Dec J200 + stat_pos : EarthLocation or array(3) in m + time : Time or float (mjd) (can be an array) + h : array of heights + + Returns: + Tuple[ np.array, np.array, np.array, float, float, np.array ]: + + + """ + # first calculate Az,El + if type(stat_pos) is not EarthLocation: + stat_pos = EarthLocation.from_geocentric(*list(stat_pos), unit=u.m) + if type(source_pos) is not SkyCoord: + source_pos = SkyCoord( + source_pos[0], source_pos[1], unit=(u.hourangle, u.deg), frame=FK5 + ) + if type(time) is not Time: + time = Time(time, format="mjd") + aa = AltAz(location=stat_pos, obstime=time) + azel = source_pos.transform_to(aa) + direction = azel.transform_to(ITRS) + londir = np.arctan2(direction.y.value, direction.x.value) + latdir = np.arcsin(direction.z.value) + + fh, flat, flon, fRloc = distance_from_height( + azel, h[0].to(u.km).value, h[-1].to(u.km).value, u.km + ) + hdist = fh(h.to(u.km)) + latpp = flat(hdist) + lonpp = flon(hdist) + R_local = stat_pos.to(u.km).itrs.cartesian.norm().value + Rpp = fRloc(hdist) + # am = 1./((R_earthkm**2-hdist**2-(R_earthkm+h.to(u.km).value)**2)/(-2.*hdist*(R_earthkm+h.to(u.km).value))) + am = 1.0 / ((R_local**2 - hdist**2 - Rpp**2) / (-2.0 * hdist * Rpp)) + return latpp, lonpp, latdir, londir, am + +def getAzEl(pointing, time, position, ha_limit=-1000): if HAS_PYRAP: - if ha_limit==-1000: - azel=radec2azel(pointing[0],pointing[1],time=str(time)+'s',pos=position) - az=azel['m0']['value'] - el=azel['m1']['value'] + if ha_limit == -1000: + azel = radec2azel( + pointing[0], pointing[1], time=str(time) + "s", pos=position + ) + az = azel["m0"]["value"] + el = azel["m1"]["value"] else: - me=measures() - p=me.position("ITRF",str(position[0])+'m',str(position[1])+'m',str(position[2])+'m') - t=me.epoch("UTC",qu.quantity(str(time)+'s')) - phasedir=me.direction('J2000',str(pointing[0])+'rad',str(pointing[1])+'rad') + me = measures() + p = me.position( + "ITRF", + str(position[0]) + "m", + str(position[1]) + "m", + str(position[2]) + "m", + ) + t = me.epoch("UTC", qu.quantity(str(time) + "s")) + phasedir = me.direction( + "J2000", str(pointing[0]) + "rad", str(pointing[1]) + "rad" + ) me.doframe(p) me.doframe(t) - hadec=me.measure(phasedir,"HADEC") - if abs(hadec['m0']['value'])>ha_limit: - print ("below horizon",tab.taql('calc ctod($time s)')[0],degrees(hadec['m0']['value']),degrees(hadec['m1']['value'])) - return 999,999 + hadec = me.measure(phasedir, "HADEC") + if abs(hadec["m0"]["value"]) > ha_limit: + print( + "below horizon", + tab.taql("calc ctod($time s)")[0], + degrees(hadec["m0"]["value"]), + degrees(hadec["m1"]["value"]), + ) + return 999, 999 else: - azel=me.measure(phasedir,"AZELGEO") - - az=azel['m0']['value'] - el=azel['m1']['value'] + azel = me.measure(phasedir, "AZELGEO") + + az = azel["m0"]["value"] + el = azel["m1"]["value"] elif HAS_EPHEM: - if ha_limit!=-1000: - print ("limiting on HA/DEC not implemented for PyEphem yet, ignoring") - location_lat, location_lon, location_height = ITRFToWGS84(position[0], position[1], position[2]) + if ha_limit != -1000: + print("limiting on HA/DEC not implemented for PyEphem yet, ignoring") + location_lat, location_lon, location_height = ITRFToWGS84( + position[0], position[1], position[2] + ) location = ephem.Observer() # convert geodetic latitude to geocentric # flattening, f, defined above for WGS84 stuff geodet_lat = radians(location_lat) - tan_geocentric_latitude = tan(geodet_lat) * (1 - f) **2 + tan_geocentric_latitude = tan(geodet_lat) * (1 - f) ** 2 geocentric_latitude = GeodeticToGeocentricLat(geodet_lat, location_height) location.lat = geocentric_latitude location.lon = radians(location_lon) location.elevation = location_height location.pressure = 0.0 # convert to Dublin Julian Date for PyEphem - location.date = time/86400.0 - 15019.5 + location.date = time / 86400.0 - 15019.5 lst = location.sidereal_time() - equatorial = ephem.Equatorial(str(12.0 * degrees(pointing[0])/180),str(degrees(pointing[1]))) + equatorial = ephem.Equatorial( + str(12.0 * degrees(pointing[0]) / 180), str(degrees(pointing[1])) + ) body = ephem.FixedBody() body._ra = equatorial.ra body._dec = equatorial.dec body._epoch = equatorial.epoch body.compute(location) - az = degrees(body.az) * pi / 180.0 + az = degrees(body.az) * pi / 180.0 el = degrees(body.alt) * pi / 180.0 - else: - print ('failure to get azimuth and elevation! Exiting!') - return -1,-1 - return az,el + else: + print("failure to get azimuth and elevation! Exiting!") + return -1, -1 + return az, el -def get_time_range(start_time,end_time,timestep,time_in_sec,TIME_OFFSET=0): +def get_time_range(start_time, end_time, timestep, time_in_sec, TIME_OFFSET=0): if HAS_PYRAP: - try: - start_time = qu.quantity(start_time).get_value() - end_time = qu.quantity(end_time).get_value() - print ('**** specified start and end time ', start_time, end_time) - reference_time = start_time * 86400.0 - TIME_OFFSET - st = reference_time - timestep - et = end_time * 86400.0 + timestep + TIME_OFFSET - #print ("getting string",reference_time) - str_start_time = obtain_observation_year_month_day_hms(reference_time) - timerange= [st, et] - except: - print ('no time range given') - print ('exiting') - return -1,-1,-1 + try: + start_time = qu.quantity(start_time).get_value() + end_time = qu.quantity(end_time).get_value() + print("**** specified start and end time ", start_time, end_time) + reference_time = start_time * 86400.0 - TIME_OFFSET + st = reference_time - timestep + et = end_time * 86400.0 + timestep + TIME_OFFSET + # print ("getting string",reference_time) + str_start_time = obtain_observation_year_month_day_hms(reference_time) + timerange = [st, et] + except: + print("no time range given") + print("exiting") + return -1, -1, -1 elif HAS_EPHEM: - if time_in_sec: - dublin_start = start_time / 86400.0 -15019.5 - dublin_end = end_time / 86400.0 -15019.5 - start_time = ephem.julian_date(ephem.Date(dublin_start)) - 2400000.5 - end_time = ephem.julian_date(ephem.Date(dublin_end)) - 2400000.5 - else: - start_time = ephem.julian_date(ephem.Date(start_time)) - 2400000.5 - end_time = ephem.julian_date(ephem.Date(end_time)) - 2400000.5 - print ('ephem start and end time ', start_time, end_time) - reference_time = start_time * 86400.0 - TIME_OFFSET - st = reference_time - timestep - et = end_time * 86400.0 + timestep + TIME_OFFSET - str_start_time = obtain_observation_year_month_day_hms(reference_time) - timerange= [st, et] + if time_in_sec: + dublin_start = start_time / 86400.0 - 15019.5 + dublin_end = end_time / 86400.0 - 15019.5 + start_time = ephem.julian_date(ephem.Date(dublin_start)) - 2400000.5 + end_time = ephem.julian_date(ephem.Date(dublin_end)) - 2400000.5 + else: + start_time = ephem.julian_date(ephem.Date(start_time)) - 2400000.5 + end_time = ephem.julian_date(ephem.Date(end_time)) - 2400000.5 + print("ephem start and end time ", start_time, end_time) + reference_time = start_time * 86400.0 - TIME_OFFSET + st = reference_time - timestep + et = end_time * 86400.0 + timestep + TIME_OFFSET + str_start_time = obtain_observation_year_month_day_hms(reference_time) + timerange = [st, et] else: - print ('unable to get time range so exiting!') - return -1,-1,-1 - return timerange,str_start_time,reference_time + print("unable to get time range so exiting!") + return -1, -1, -1 + return timerange, str_start_time, reference_time diff --git a/RMextract/formatters.py b/RMextract/formatters.py index d61d184..f30c466 100644 --- a/RMextract/formatters.py +++ b/RMextract/formatters.py @@ -3,14 +3,14 @@ """ Formatters for the different IONEX servers """ -# Url of the primary server has the syntax -# "ftp://ftp.aiub.unibe.ch/CODE/YYYY/CODGDOY0.YYI.Z" -# where DOY is the day of the year, padded with +# Url of the primary server has the syntax +# "ftp://ftp.aiub.unibe.ch/CODE/YYYY/CODGDOY0.YYI.Z" +# where DOY is the day of the year, padded with # leading zero if <100, and YY is the last two digits of year. -# Url of the backup server has the syntax +# Url of the backup server has the syntax # "ftp://cddis.gsfc.nasa.gov/gnss/products/ionex/YYYY/DOY/codgDOY.YYi.Z" -# where DOY is the day of the year, padded with +# where DOY is the day of the year, padded with # leading zero if <100, and YY is the last two digits of year. from typing import Callable, Dict @@ -18,35 +18,39 @@ Formatter = Callable[[str, int, int, str], str] + def ftp_aiub_unibe_ch(server: str, year: int, dayofyear: int, prefix: str) -> str: """ Format the URL for the ftp.aiub.unibe.ch server """ return f"{server}/CODE/{year:4d}/{prefix.upper()}{dayofyear:03d}0.{year%100:02d}I.Z" + def cddis_gsfc_nasa_gov(server: str, year: int, dayofyear: int, prefix: str) -> str: """ Format the URL for the cddis.gsfc.nasa.gov server """ return f"{server}/gnss/products/ionex/{year:4d}/{dayofyear:03d}/{prefix.lower()}{dayofyear:03d}0.{year%100:02d}i.Z" + def igsiono_uwm_edu_pl(server: str, year: int, dayofyear: int, prefix: str) -> str: """ Format the URL for the igsiono.uwm.edu.pl server """ return f"{server}/data/ilt/{year:4d}/igrg{dayofyear:03d}0.{year%100:02d}i" + def chapman_upc_es(server: str, year: int, dayofyear: int, prefix: str) -> str: """ Format the URL for the http://chapman.upc.es server """ - dt = datetime(year,1,1) + timedelta(dayofyear-1) + dt = datetime(year, 1, 1) + timedelta(dayofyear - 1) return f"{server}/tomion/rapid/{year:4d}/{dayofyear:03d}_{year%100:02d}{dt.month:02d}{dt.day:02d}.15min/{prefix.lower()}{dayofyear:03d}0.{year%100:02d}i.Z" -KNOWN_FORMATTERS: Dict[str,Formatter] = { +KNOWN_FORMATTERS: Dict[str, Formatter] = { "ftp.aiub.unibe.ch": ftp_aiub_unibe_ch, "cddis.gsfc.nasa.gov": cddis_gsfc_nasa_gov, "igsiono.uwm.edu.pl": igsiono_uwm_edu_pl, - "http://chapman.upc.es": chapman_upc_es + "http://chapman.upc.es": chapman_upc_es, } diff --git a/RMextract/getIONEX.py b/RMextract/getIONEX.py index b57b673..d0a7c76 100644 --- a/RMextract/getIONEX.py +++ b/RMextract/getIONEX.py @@ -8,6 +8,7 @@ @author: mevius """ + import datetime import ftplib import os @@ -47,50 +48,50 @@ def _read_ionex_header(filep): stripped = line.strip() if stripped.endswith("EPOCH OF FIRST MAP"): starttime = datetime.datetime( - *(int(float(i)) for i in - stripped.replace("EPOCH OF FIRST MAP","").split())) + *( + int(float(i)) + for i in stripped.replace("EPOCH OF FIRST MAP", "").split() + ) + ) if stripped.endswith("EPOCH OF LAST MAP"): endtime = datetime.datetime( - *(int(float(i)) for i in - stripped.replace("EPOCH OF LAST MAP","").split())) + *( + int(float(i)) + for i in stripped.replace("EPOCH OF LAST MAP", "").split() + ) + ) if stripped.endswith("INTERVAL"): - timestep = float(stripped.split()[0]) / 3600. + timestep = float(stripped.split()[0]) / 3600.0 if stripped.endswith("EXPONENT"): exponent = pow(10, float(stripped.split()[0])) if stripped.endswith("DLON"): - start_lon, end_lon, step_lon = \ - (float(i) for i in stripped.split()[:3]) + start_lon, end_lon, step_lon = (float(i) for i in stripped.split()[:3]) if stripped.endswith("DLAT"): - start_lat, end_lat, step_lat = \ - (float(i) for i in stripped.split()[:3]) + start_lat, end_lat, step_lat = (float(i) for i in stripped.split()[:3]) if stripped.endswith("OF MAPS IN FILE"): ntimes = int(stripped.split()[0]) lonarray = np.arange(start_lon, end_lon + step_lon, step_lon) latarray = np.arange(start_lat, end_lat + step_lat, step_lat) dtime = endtime - starttime - dtimef = dtime.days * 24. + dtime.seconds / 3600. + dtimef = dtime.days * 24.0 + dtime.seconds / 3600.0 logger.debug("timerange %f hours. step = %f ", dtimef, timestep) - timearray = np.arange(0, - dtimef + timestep, - timestep) + timearray = np.arange(0, dtimef + timestep, timestep) if timearray.shape[0] < ntimes: # bug in ILTF files,last time in header is incorrect - extratimes = np.arange(timearray[-1] + timestep, - timearray[-1] - + (ntimes - - timearray.shape[0] + 0.5) * timestep, - timestep) + extratimes = np.arange( + timearray[-1] + timestep, + timearray[-1] + (ntimes - timearray.shape[0] + 0.5) * timestep, + timestep, + ) timearray = np.concatenate((timearray, extratimes)) - timearray += starttime.hour\ - + starttime.minute/60.\ - + starttime.second/3600. + timearray += starttime.hour + starttime.minute / 60.0 + starttime.second / 3600.0 return exponent, lonarray, latarray, timearray def read_tec(filename, _use_filter=None): - """ returns TEC, RMS longitude, lattitude and time read from an IONEX file. + """returns TEC, RMS longitude, lattitude and time read from an IONEX file. Args: filename (string) : the full path to the IONEXfile @@ -106,12 +107,13 @@ def read_tec(filename, _use_filter=None): """ ionex_file = open(filename, "r") exponent, lonarray, latarray, timearray = _read_ionex_header(ionex_file) - logger.info("reading data with shapes %d x %d x %d", - timearray.shape[0], - latarray.shape[0], - lonarray.shape[0]) - tecarray = np.zeros(timearray.shape - + latarray.shape + lonarray.shape, dtype=float) + logger.info( + "reading data with shapes %d x %d x %d", + timearray.shape[0], + latarray.shape[0], + lonarray.shape[0], + ) + tecarray = np.zeros(timearray.shape + latarray.shape + lonarray.shape, dtype=float) rmsarray = np.zeros_like(tecarray) timeidx = 0 lonidx = 0 @@ -132,7 +134,7 @@ def read_tec(filename, _use_filter=None): continue if "LAT/LON1/LON2/DLON/H" in line: readdata = True - latstr = line.strip().replace("LAT/LON1/LON2/DLON/H","") + latstr = line.strip().replace("LAT/LON1/LON2/DLON/H", "") lat = np.fromstring(" -".join(latstr.split("-")), sep=" ") latidx = np.argmin(np.abs(latarray - lat[0])) lonidx = 0 @@ -144,16 +146,14 @@ def read_tec(filename, _use_filter=None): readdata = False continue if readdata: - data = np.fromstring(" -".join(line.strip().split("-")), - sep=" ") * exponent + data = np.fromstring(" -".join(line.strip().split("-")), sep=" ") * exponent if tecdata: - tecarray[timeidx, latidx, lonidx:lonidx + data.shape[0]] = data + tecarray[timeidx, latidx, lonidx : lonidx + data.shape[0]] = data elif rmsdata: - rmsarray[timeidx, latidx, lonidx:lonidx + data.shape[0]] = data + rmsarray[timeidx, latidx, lonidx : lonidx + data.shape[0]] = data lonidx += data.shape[0] if _use_filter is not None: - tecarray = myfilter.gaussian_filter( - tecarray, _use_filter, mode='nearest') + tecarray = myfilter.gaussian_filter(tecarray, _use_filter, mode="nearest") return tecarray, rmsarray, lonarray, latarray, timearray @@ -165,7 +165,7 @@ def readTEC(filename, use_filter=None): def _compute_index_and_weights(maparray, mapvalues): - '''helper function to get indices and weights for interpolating tecmaps + """helper function to get indices and weights for interpolating tecmaps Args: @@ -175,10 +175,11 @@ def _compute_index_and_weights(maparray, mapvalues): Tuple[np.array, np.array, np.array]: idx1,idx2 and weights for idx2, idx2 is always >= idx1 - ''' + """ is_reverse = maparray[1] < maparray[0] - idx1 = np.argmin(np.absolute(maparray[np.newaxis] - - mapvalues[:, np.newaxis]), axis=1) + idx1 = np.argmin( + np.absolute(maparray[np.newaxis] - mapvalues[:, np.newaxis]), axis=1 + ) idx2 = idx1.copy() if not is_reverse: idx1[maparray[idx1] > mapvalues] -= 1 @@ -192,13 +193,13 @@ def _compute_index_and_weights(maparray, mapvalues): idx2[idx2 >= maparray.shape[0]] = maparray.shape[0] - 1 _steps = np.absolute(maparray[idx2] - maparray[idx1]) weights = np.absolute(mapvalues - maparray[idx1]) - weights[_steps == 0] = 1. - weights[_steps!=0] = weights [_steps!=0]/ _steps[_steps!=0] + weights[_steps == 0] = 1.0 + weights[_steps != 0] = weights[_steps != 0] / _steps[_steps != 0] return idx1, idx2, weights def compute_tec_interpol(times, lats, lons, tecinfo, apply_earth_rotation=0): - '''Get interpolated TEC for array of times/lats and lons + """Get interpolated TEC for array of times/lats and lons Derive interpolated (4 point in lon,lat,2 point in time) vTEC values, optionally correcting for earth rotation. @@ -221,11 +222,9 @@ def compute_tec_interpol(times, lats, lons, tecinfo, apply_earth_rotation=0): of the earth Returns: np.array : interpolated tecvalues - ''' - assert times.shape == lats.shape,\ - "times and lats should be array with same shape" - assert times.shape == lons.shape, \ - "times and lons should be array with same shape" + """ + assert times.shape == lats.shape, "times and lats should be array with same shape" + assert times.shape == lons.shape, "times and lons should be array with same shape" tecdata = tecinfo[0] # TEC in TECU lonarray = tecinfo[2] # longitude in degrees from West to East (- to +) latarray = tecinfo[3] # lattitude in degrees @@ -234,91 +233,133 @@ def compute_tec_interpol(times, lats, lons, tecinfo, apply_earth_rotation=0): # get indices of nearest 2 time frames + inverse distance weights # assume time is sorted from early to late - timeidx1, timeidx2, time_weights = _compute_index_and_weights( - maptimes, times) + timeidx1, timeidx2, time_weights = _compute_index_and_weights(maptimes, times) # latarray is sorted small to large - latidx1, latidx2, lat_weights = _compute_index_and_weights( - latarray, lats) + latidx1, latidx2, lat_weights = _compute_index_and_weights(latarray, lats) # for getting lon idx take into account earth_rotation # if longitudes cover all range between -180 and 180 you can modulate the # indices, otherwise we have to take the edge of the map. lonstep = lonarray[1] - lonarray[0] - full_circle = np.remainder(lonarray[0] - lonarray[-1], 360.)\ - <= 1.1 * lonstep + full_circle = np.remainder(lonarray[0] - lonarray[-1], 360.0) <= 1.1 * lonstep - rot1 = ((times - maptimes[timeidx1]) * 360. / 24.) * apply_earth_rotation - rot2 = ((times - maptimes[timeidx2]) * 360. / 24.) * apply_earth_rotation + rot1 = ((times - maptimes[timeidx1]) * 360.0 / 24.0) * apply_earth_rotation + rot2 = ((times - maptimes[timeidx2]) * 360.0 / 24.0) * apply_earth_rotation if not full_circle: lonidx11, lonidx12, lon_weights1 = _compute_index_and_weights( - lonarray, lons + rot1) + lonarray, lons + rot1 + ) lonidx21, lonidx22, lon_weights2 = _compute_index_and_weights( - lonarray, lons + rot2) + lonarray, lons + rot2 + ) else: - lonidx11 = np.argmin(np.absolute(np.remainder(lonarray[np.newaxis] - - rot1[:, np.newaxis] - - lons[:, np.newaxis] - + 180., 360.) - - 180.), axis=1) + lonidx11 = np.argmin( + np.absolute( + np.remainder( + lonarray[np.newaxis] + - rot1[:, np.newaxis] + - lons[:, np.newaxis] + + 180.0, + 360.0, + ) + - 180.0 + ), + axis=1, + ) lonidx12 = lonidx11.copy() - lonidx11[np.remainder(lonarray[lonidx11] - rot1 - lons + 180., 360.) - - 180. > 0] -= 1 - lonidx12[np.remainder(lonarray[lonidx12] - rot1 - lons + 180., 360.) - - 180. < 0] += 1 + lonidx11[ + np.remainder(lonarray[lonidx11] - rot1 - lons + 180.0, 360.0) - 180.0 > 0 + ] -= 1 + lonidx12[ + np.remainder(lonarray[lonidx12] - rot1 - lons + 180.0, 360.0) - 180.0 < 0 + ] += 1 lonidx11[lonidx11 < 0] += lonarray.shape[0] lonidx12[lonidx12 < 0] += lonarray.shape[0] lonidx11[lonidx11 >= lonarray.shape[0]] -= lonarray.shape[0] lonidx12[lonidx12 >= lonarray.shape[0]] -= lonarray.shape[0] - lon_weights1 = np.absolute(np.remainder(lonarray[lonidx11] - - rot1 - - lons + 180., 360.) - - 180.) / lonstep - - lonidx21 = np.argmin(np.absolute(np.remainder(lonarray[np.newaxis] - - rot2[:, np.newaxis] - - lons[:, np.newaxis] - + 180., 360.) - - 180.), axis=1) + lon_weights1 = ( + np.absolute( + np.remainder(lonarray[lonidx11] - rot1 - lons + 180.0, 360.0) - 180.0 + ) + / lonstep + ) + + lonidx21 = np.argmin( + np.absolute( + np.remainder( + lonarray[np.newaxis] + - rot2[:, np.newaxis] + - lons[:, np.newaxis] + + 180.0, + 360.0, + ) + - 180.0 + ), + axis=1, + ) lonidx22 = lonidx21.copy() - lonidx21[np.remainder(lonarray[lonidx21] - rot2 - lons + 180., 360.) - - 180. > 0] -= 1 - lonidx22[np.remainder(lonarray[lonidx22] - rot2 - lons + 180., 360.) - - 180. < 0] += 1 + lonidx21[ + np.remainder(lonarray[lonidx21] - rot2 - lons + 180.0, 360.0) - 180.0 > 0 + ] -= 1 + lonidx22[ + np.remainder(lonarray[lonidx22] - rot2 - lons + 180.0, 360.0) - 180.0 < 0 + ] += 1 lonidx21[lonidx21 < 0] += lonarray.shape[0] lonidx22[lonidx22 < 0] += lonarray.shape[0] lonidx21[lonidx21 >= lonarray.shape[0]] -= lonarray.shape[0] lonidx22[lonidx22 >= lonarray.shape[0]] -= lonarray.shape[0] - lon_weights2 = np.absolute(np.remainder(lonarray[lonidx21] - - rot2 - - lons + 180., 360.) - - 180.) / lonstep - logger.debug("inidces time %d %d indices lat %d %d indices \ - lon %d %d %d %d", timeidx1[0], timeidx2[0], - latidx1[0], latidx2[0], - lonidx11[0], lonidx12[0], - lonidx21[0], lonidx22[0]) - logger.debug("weights time %f lat %f lon %f %f", - time_weights[0], - lat_weights[0], - lon_weights1[0], - lon_weights2[0]) - tecs = (tecdata[timeidx1, latidx1, lonidx11] * (1. - lon_weights1) - + tecdata[timeidx1, latidx1, lonidx12] * lon_weights1) \ - * (1. - time_weights) - tecs += (tecdata[timeidx2, latidx1, lonidx21] * (1. - lon_weights2) - + tecdata[timeidx2, latidx1, lonidx22] * lon_weights2) \ - * (time_weights) - tecs *= 1. - lat_weights - tecs += lat_weights \ - * (tecdata[timeidx1, latidx2, lonidx11] * (1. - lon_weights1) - + tecdata[timeidx1, latidx2, lonidx12] * lon_weights1) \ - * (1. - time_weights) - tecs += lat_weights \ - * (tecdata[timeidx2, latidx2, lonidx21] * (1. - lon_weights2) - + tecdata[timeidx2, latidx2, lonidx22] * lon_weights2) \ + lon_weights2 = ( + np.absolute( + np.remainder(lonarray[lonidx21] - rot2 - lons + 180.0, 360.0) - 180.0 + ) + / lonstep + ) + logger.debug( + "inidces time %d %d indices lat %d %d indices \ + lon %d %d %d %d", + timeidx1[0], + timeidx2[0], + latidx1[0], + latidx2[0], + lonidx11[0], + lonidx12[0], + lonidx21[0], + lonidx22[0], + ) + logger.debug( + "weights time %f lat %f lon %f %f", + time_weights[0], + lat_weights[0], + lon_weights1[0], + lon_weights2[0], + ) + tecs = ( + tecdata[timeidx1, latidx1, lonidx11] * (1.0 - lon_weights1) + + tecdata[timeidx1, latidx1, lonidx12] * lon_weights1 + ) * (1.0 - time_weights) + tecs += ( + tecdata[timeidx2, latidx1, lonidx21] * (1.0 - lon_weights2) + + tecdata[timeidx2, latidx1, lonidx22] * lon_weights2 + ) * (time_weights) + tecs *= 1.0 - lat_weights + tecs += ( + lat_weights + * ( + tecdata[timeidx1, latidx2, lonidx11] * (1.0 - lon_weights1) + + tecdata[timeidx1, latidx2, lonidx12] * lon_weights1 + ) + * (1.0 - time_weights) + ) + tecs += ( + lat_weights + * ( + tecdata[timeidx2, latidx2, lonidx21] * (1.0 - lon_weights2) + + tecdata[timeidx2, latidx2, lonidx22] * lon_weights2 + ) * (time_weights) + ) return tecs @@ -326,24 +367,24 @@ def getTECinterpol(time, lat, lon, tecinfo, apply_earth_rotation=0): """old function name for compatibility. Use compute_tec_interpol instead""" - #logger.warning("obsolete, use compute_tec_interpol instead") + # logger.warning("obsolete, use compute_tec_interpol instead") if np.isscalar(time): time = [time] lat = [lat] lon = [lon] - return compute_tec_interpol(np.array(time), np.array(lat), np.array(lon), - tecinfo, - apply_earth_rotation) + return compute_tec_interpol( + np.array(time), np.array(lat), np.array(lon), tecinfo, apply_earth_rotation + ) -def _combine_ionex(outpath, filenames, newfilename, overwrite = False): +def _combine_ionex(outpath, filenames, newfilename, overwrite=False): """Helper function to combine separate IONEXfiles into 1 single file (needed for 15min ROBR data)""" if not overwrite and os.path.isfile(outpath + newfilename): logger.info("FILE exists: " + outpath + newfilename) return outpath + newfilename - newf = open(outpath + newfilename, 'w') + newf = open(outpath + newfilename, "w") filenames = sorted(filenames) firstfile = open(filenames[0]) lastfile = open(filenames[-1]) @@ -359,7 +400,7 @@ def _combine_ionex(outpath, filenames, newfilename, overwrite = False): break if "EPOCH OF LAST MAP" not in line: if "OF MAPS IN FILE" in line: - newf.write(line.replace('1', str(len(filenames)))) + newf.write(line.replace("1", str(len(filenames)))) else: newf.write(line) else: @@ -374,10 +415,10 @@ def _combine_ionex(outpath, filenames, newfilename, overwrite = False): else: if end_of_header: if "END OF TEC MAP" in line: - newf.write(line.replace('1', str(tecmapnr))) + newf.write(line.replace("1", str(tecmapnr))) break if "START OF TEC MAP" in line: - newf.write(line.replace('1', str(tecmapnr))) + newf.write(line.replace("1", str(tecmapnr))) else: newf.write(line) tecmapnr += 1 @@ -385,11 +426,10 @@ def _combine_ionex(outpath, filenames, newfilename, overwrite = False): return os.path.join(outpath, newfilename) # ignore RMS map for now, since it is filled with zeros anyway + def _gunzip_some_file( - compressed_file: PathLike, - uncompressed_file: PathLike, - delete_file:bool=True - ): + compressed_file: PathLike, uncompressed_file: PathLike, delete_file: bool = True +): command = "gunzip -dc %s > %s" % (compressed_file, uncompressed_file) retcode = os.system(command) if retcode: @@ -400,16 +440,13 @@ def _gunzip_some_file( def _store_files( - ftp: ftplib.FTP, - filenames: List[str], - outpath: Path, - overwrite=False - ) -> List[str]: + ftp: ftplib.FTP, filenames: List[str], outpath: Path, overwrite=False +) -> List[str]: """helper function to store files from ftp server to outpath""" npaths: List[Path] = [] for myf in filenames: - #make sure filename is always stored uppercase + # make sure filename is always stored uppercase mypath = outpath / myf.upper() if not overwrite and mypath.exists(): npaths.append(mypath) @@ -425,24 +462,20 @@ def _store_files( nfilenames: List[str] = [] for myf in npaths: if myf.suffix == ".Z": - nfilenames.append( - _gunzip_some_file( - myf, - myf.with_suffix("") - ).as_posix() - ) + nfilenames.append(_gunzip_some_file(myf, myf.with_suffix("")).as_posix()) else: nfilenames.append(myf.as_posix()) return nfilenames + def _get_IONEX_file( - time="2012/03/23/02:20:10.01", - server="ftp://gssc.esa.int/gnss/products/ionex/", - prefix="UQRG", - outpath=Path("./"), - overwrite=False, - backupserver="ftp://ftp.aiub.unibe.ch/CODE/" - ) -> str: + time="2012/03/23/02:20:10.01", + server="ftp://gssc.esa.int/gnss/products/ionex/", + prefix="UQRG", + outpath=Path("./"), + overwrite=False, + backupserver="ftp://ftp.aiub.unibe.ch/CODE/", +) -> str: """Get IONEX file with prefix from server for a given day Downloads files with given prefix from the ftp server, unzips and stores @@ -457,10 +490,10 @@ def _get_IONEX_file( outpath (Path) : path where the data is stored overwrite (bool) : Do (not) overwrite existing data """ - prefix=prefix.upper() + prefix = prefix.upper() if not isinstance(outpath, Path): - outpath = Path(outpath) # for backward compatibility + outpath = Path(outpath) # for backward compatibility if not outpath.exists(): try: outpath.mkdir(parents=True) @@ -484,53 +517,57 @@ def _get_IONEX_file( # If file exists just return filename for _test_path in ( outpath / f"{prefix}{dayofyear:03d}0.{yy:02d}I", - outpath / f"IGRG{dayofyear:03d}0.{yy:02d}I", # IGRG (fast files) (UGLY!!) + outpath / f"IGRG{dayofyear:03d}0.{yy:02d}I", # IGRG (fast files) (UGLY!!) ): if not overwrite and _test_path.exists(): logger.info(f"FILE exists: {_test_path}") return _test_path.as_posix() - - tried_backup=False - serverfound=False + + tried_backup = False + serverfound = False while not serverfound: url = urlparse(server) ftpserver = url.netloc ftppath = url.path nr_tries = 0 try_again = True - while try_again and nr_tries<10: + while try_again and nr_tries < 10: try: ftp = ftplib.FTP(ftpserver) ftp.login() - try_again=False - serverfound=True + try_again = False + serverfound = True except ftplib.error_perm: if "213.184.6.172" in server: ftp.login("data-out", "Qz8803#mhR4z") - try_again=False - serverfound=True + try_again = False + serverfound = True else: - try_again=True + try_again = True nr_tries += 1 - if nr_tries>=10: - if tried_backup or server==backupserver: - raise Exception("Could not connect to %s"%ftpserver) + if nr_tries >= 10: + if tried_backup or server == backupserver: + raise Exception("Could not connect to %s" % ftpserver) else: - server=backupserver - tried_backup=True - logger.warning(f"Primary IONEX host '{server}' resolution " - f"failure. Trying backup at '{backupserver}'") + server = backupserver + tried_backup = True + logger.warning( + f"Primary IONEX host '{server}' resolution " + f"failure. Trying backup at '{backupserver}'" + ) except socket.gaierror: - try_again=True + try_again = True nr_tries += 1 - if nr_tries>=10: - if tried_backup or server==backupserver: - raise Exception("Could not connect to %s"%ftpserver) + if nr_tries >= 10: + if tried_backup or server == backupserver: + raise Exception("Could not connect to %s" % ftpserver) else: - server=backupserver - tried_backup=True - logger.warning(f"Primary IONEX host '{server}' resolution " - f"failure. Trying backup at '{backupserver}'") + server = backupserver + tried_backup = True + logger.warning( + f"Primary IONEX host '{server}' resolution " + f"failure. Trying backup at '{backupserver}'" + ) if serverfound: logger.info(f"Successfully contacted IONEX host '{server}'") ftp.cwd(ftppath) @@ -546,20 +583,24 @@ def _get_IONEX_file( totpath += "/%02d%03d" % (yy, dayofyear) myl = [] ftp.retrlines("NLST", myl.append) - if "%03d"%dayofyear in myl: - ftp.cwd("%03d"%dayofyear) + if "%03d" % dayofyear in myl: + ftp.cwd("%03d" % dayofyear) totpath += "/%03d" % (dayofyear) logger.info("Retrieving data from %s", totpath) myl = [] ftp.retrlines("NLST", myl.append) - filenames = [i for i in myl if (prefix.lower() in i.lower()) and - ("%03d"%dayofyear in i.lower()) and - (i.lower().endswith("i.z") or i.lower().endswith("i"))] + filenames = [ + i + for i in myl + if (prefix.lower() in i.lower()) + and ("%03d" % dayofyear in i.lower()) + and (i.lower().endswith("i.z") or i.lower().endswith("i")) + ] logger.info(" ".join(filenames)) - #assert len(filenames) > 0, "No files found on %s for %s" % (server,prefix) - if len(filenames) <=0: + # assert len(filenames) > 0, "No files found on %s for %s" % (server,prefix) + if len(filenames) <= 0: raise FileNotFoundError(f"No files found on {server} for {prefix}") - + if prefix.lower() == "robr" and len(filenames) > 1: filenames = sorted(filenames) filenames = _store_files(ftp, filenames, outpath, overwrite) @@ -576,12 +617,21 @@ def _get_IONEX_file( if str(ndayofyear) in myl: ftp.cwd(str(ndayofyear)) myl = ftp.retrlines("NLST") - nfilenames = [i for i in myl if (prefix.lower() in i.lower()) and - (i.lower().endswith("i.z")) and "A00" in i.upper()] + nfilenames = [ + i + for i in myl + if (prefix.lower() in i.lower()) + and (i.lower().endswith("i.z")) + and "A00" in i.upper() + ] nfilenames = _store_files(ftp, nfilenames, outpath, overwrite) filenames += nfilenames - _combine_ionex(outpath, filenames, - prefix + "%03d0.%sI" % (dayofyear, yy), overwrite = overwrite) + _combine_ionex( + outpath, + filenames, + prefix + "%03d0.%sI" % (dayofyear, yy), + overwrite=overwrite, + ) ftp.quit() return os.path.join(outpath, prefix + "%03d0.%sI" % (dayofyear, yy)) else: @@ -589,20 +639,21 @@ def _get_IONEX_file( ftp.quit() return nfilenames[0] + def get_urllib_IONEXfile( - time="2012/03/23/02:20:10.01", - server="http://ftp.aiub.unibe.ch/CODE/", - prefix="codg", - outpath=Path("./"), - overwrite=False, - backupserver="http://ftp.aiub.unibe.ch/CODE/", - formatter: Optional[Union[Formatter, str]]=None, - proxy_server=None, - proxy_type=None, - proxy_port=None, - proxy_user=None, - proxy_pass=None - ) -> str: + time="2012/03/23/02:20:10.01", + server="http://ftp.aiub.unibe.ch/CODE/", + prefix="codg", + outpath=Path("./"), + overwrite=False, + backupserver="http://ftp.aiub.unibe.ch/CODE/", + formatter: Optional[Union[Formatter, str]] = None, + proxy_server=None, + proxy_type=None, + proxy_port=None, + proxy_user=None, + proxy_pass=None, +) -> str: """Get IONEX file with prefix from server for a given day Downloads files with given prefix from the ftp server, unzips and stores @@ -616,7 +667,7 @@ def get_urllib_IONEXfile( prefix (string) : prefix of the IONEX files (case insensitive) outpath (string) : path where the data is stored overwrite (bool) : Do (not) overwrite existing data - formatter (Optional, Formatter | str): + formatter (Optional, Formatter | str): If a string is given, it will be used as as an index in KNOWN_FORMATTERS If a Formatter is given, it will be used to construct the filenames. Must have the following signature: @@ -628,9 +679,9 @@ def get_urllib_IONEXfile( proxy_user (string): username for proxyserver proxy_pass (string): password for proxyserver """ - prefix=prefix.upper() + prefix = prefix.upper() if not isinstance(outpath, Path): - outpath = Path(outpath) # for backward compatibility + outpath = Path(outpath) # for backward compatibility if not outpath.exists(): try: outpath.mkdir(parents=True, exist_ok=True) @@ -654,43 +705,54 @@ def get_urllib_IONEXfile( # If file exists just return filename for _test_path in ( outpath / f"{prefix}{dayofyear:03d}0.{yy:02d}I", - outpath / f"IGRG{dayofyear:03d}0.{yy:02d}I", # IGRG (fast files) (UGLY!!) + outpath / f"IGRG{dayofyear:03d}0.{yy:02d}I", # IGRG (fast files) (UGLY!!) ): if not overwrite and _test_path.exists(): logger.info(f"FILE exists: {_test_path}") return _test_path - - #If proxy url is given, enable proxy using pysocks + # If proxy url is given, enable proxy using pysocks if proxy_server and ("None" not in proxy_server): s = socks.socksocket() - if proxy_type=="socks4": + if proxy_type == "socks4": ProxyType = socks.SOCKS4 - if proxy_type=="socks5": + if proxy_type == "socks5": ProxyType = socks.SOCKS5 - s.set_proxy(ProxyType, proxy_server, proxy_port, rdns=True, username=proxy_user, password=proxy_pass) + s.set_proxy( + ProxyType, + proxy_server, + proxy_port, + rdns=True, + username=proxy_user, + password=proxy_pass, + ) # Don't do connection tests for local files if "file://" not in server: - #try primary url + # try primary url try: - _ = request.urlopen(server,timeout=30) + _ = request.urlopen(server, timeout=30) except Exception as e: - logger.error(f"{e}") - try: - _ = request.urlopen(backupserver,timeout=30) - server=backupserver - logger.warning(f"Primary IONEX host '{server}' resolution " - f"failure. Trying backup at '{backupserver}'") - except Exception as e: - logger.error(f"Primary and Backup Server not responding: {e}") #enable in lover environment - - + logger.error(f"{e}") + try: + _ = request.urlopen(backupserver, timeout=30) + server = backupserver + logger.warning( + f"Primary IONEX host '{server}' resolution " + f"failure. Trying backup at '{backupserver}'" + ) + except Exception as e: + logger.error( + f"Primary and Backup Server not responding: {e}" + ) # enable in lover environment + if isinstance(formatter, str): try: formatter = KNOWN_FORMATTERS[formatter] except KeyError: - raise ValueError(f"Unknown formatter {formatter} - please provide a callable") + raise ValueError( + f"Unknown formatter {formatter} - please provide a callable" + ) if formatter is None: # Check known servers for known_server in KNOWN_FORMATTERS.keys(): @@ -699,16 +761,15 @@ def get_urllib_IONEXfile( break if formatter is None: raise ValueError(f"Unknown server {server} - please provide a formatter") - + url = formatter(server=server, prefix=prefix, year=year, dayofyear=dayofyear) logger.debug(f"Constructed {url=}.") - # Download IONEX file, make sure it is always uppercase fname = outpath / Path(url).name.upper() - out_fname = fname.with_suffix("") if fname.suffix == ".Z" else fname - + out_fname = fname.with_suffix("") if fname.suffix == ".Z" else fname + # First, if the final file already exists, simply return if not overwrite and out_fname.exists(): return out_fname.as_posix() @@ -718,61 +779,74 @@ def get_urllib_IONEXfile( if not fname.exists(): logger.info(f"Downloading to {fname=}.") try: - site = request.urlopen(url,timeout=30) + site = request.urlopen(url, timeout=30) except Exception as e: logger.error(f"No files found on {server} for {fname}") raise e - with open(fname,'wb') as output: + with open(fname, "wb") as output: output.write(site.read()) ###### gunzip files - # Now if the fname and out_fname are different we need to extract. - # Make sure that the out_fname does not already exist. + # Now if the fname and out_fname are different we need to extract. + # Make sure that the out_fname does not already exist. if fname != out_fname and not out_fname.exists(): _gunzip_some_file(fname, out_fname) - + return out_fname.as_posix() -def getIONEXfile(time="2012/03/23/02:20:10.01", - server="ftp://ftp.aiub.unibe.ch/CODE/", - prefix="codg", - outpath='./', - overwrite=False): + +def getIONEXfile( + time="2012/03/23/02:20:10.01", + server="ftp://ftp.aiub.unibe.ch/CODE/", + prefix="codg", + outpath="./", + overwrite=False, +): getIONEXfile.__doc__ = _get_IONEX_file.__doc__ return _get_IONEX_file(time, server, prefix, outpath, overwrite) -def get_TEC_data(times, lonlatpp, server, prefix, outpath, use_filter=None,earth_rot=0.): - '''Returns vtec for given times and lonlats. - If times has the same length as the first axis of lonlatpp, + +def get_TEC_data( + times, lonlatpp, server, prefix, outpath, use_filter=None, earth_rot=0.0 +): + """Returns vtec for given times and lonlats. + If times has the same length as the first axis of lonlatpp, it is assumed that there is a one to one correspondence. Else vTEC is calculated for every combination of lonlatpp and times. - + Args: times (np.array) : float of time in MJD seconds - lonlatpp (np.array) : array of time X 2 ,longitude lattitude of + lonlatpp (np.array) : array of time X 2 ,longitude lattitude of piercepoints server (string) : ftp server to get IONEX data from - prefix (string) : prefix of IONEX data + prefix (string) : prefix of IONEX data outpath (string) : local location of the IONEX files Returns: np.array : array with shape times.shape x lonlatpp.shape[0], unless both are equal - ''' - + """ + date_parms = PosTools.obtain_observation_year_month_day_fraction(times[0]) - ionexf=getIONEXfile(time=date_parms,server=server,prefix=prefix,outpath=outpath) - tecinfo=readTEC(ionexf,use_filter=use_filter) + ionexf = getIONEXfile( + time=date_parms, server=server, prefix=prefix, outpath=outpath + ) + tecinfo = readTEC(ionexf, use_filter=use_filter) latpp = lonlatpp[:, 1] lonpp = lonlatpp[:, 0] if latpp.shape == times.shape: - vtec = compute_tec_interpol(times,lat=latpp,lon=lonpp,tecinfo=tecinfo,apply_earth_rotation=earth_rot) + vtec = compute_tec_interpol( + times, lat=latpp, lon=lonpp, tecinfo=tecinfo, apply_earth_rotation=earth_rot + ) else: - vtec=[] + vtec = [] for itime in range(times.shape[0]): - vtec.append(compute_tec_interpol(times[itime]*np.ones_like(latpp), - lat=latpp, - lon=lonpp, - tecinfo=tecinfo, - apply_earth_rotation=earth_rot)) + vtec.append( + compute_tec_interpol( + times[itime] * np.ones_like(latpp), + lat=latpp, + lon=lonpp, + tecinfo=tecinfo, + apply_earth_rotation=earth_rot, + ) + ) return np.array(vtec) - diff --git a/RMextract/getRM.py b/RMextract/getRM.py index a1c69cc..9adb64f 100644 --- a/RMextract/getRM.py +++ b/RMextract/getRM.py @@ -2,7 +2,7 @@ import os from datetime import date from pathlib import Path -from typing import Callable, List, Literal, Optional, Tuple, Union +from typing import List, Literal, Optional, Union import numpy as np @@ -12,40 +12,41 @@ from RMextract.formatters import Formatter from RMextract.logging import logger -ION_HEIGHT=PosTools.ION_HEIGHT +ION_HEIGHT = PosTools.ION_HEIGHT ##################### main processing function ##################### + def getRM( - MS: Optional[str]=None, + MS: Optional[str] = None, server="ftp://ftp.aiub.unibe.ch/CODE/", - prefix='codg', + prefix="codg", ionexPath="IONEXdata/", - earth_rot: float=0, - timerange: Union[List[float], Literal[0]]=0, + earth_rot: float = 0, + timerange: Union[List[float], Literal[0]] = 0, start_time: Optional[str] = None, end_time: Optional[str] = None, - pointing: List[float] = [0.,0.5*np.pi], + pointing: List[float] = [0.0, 0.5 * np.pi], radec: Optional[List[float]] = None, - use_azel = False, + use_azel=False, ha_limit=-1000, use_filter: Optional[Union[float, List[float]]] = None, - use_urlib = False, - formatter: Optional[Formatter]=None, + use_urlib=False, + formatter: Optional[Formatter] = None, use_mean: Optional[bool] = None, stat_names=[], useEMM=False, - object = '', + object="", timestep=60, - out_file='', + out_file="", stat_positions=[PosTools.posCS002], - use_proxy = False, + use_proxy=False, proxy_server: Optional[str] = None, proxy_type: Optional[str] = None, proxy_port: Optional[int] = None, proxy_user: Optional[str] = None, proxy_pass: Optional[str] = None, - overwrite = False, - ) -> dict: + overwrite=False, +) -> dict: """Get ionspheric RM values for a given observation Args: @@ -86,21 +87,23 @@ def getRM( Raises: ValueError: If start_time and end_time are not given together - - Returns: The (timegrid,timestep,TEC) where TEC is a dictionary containing 1 enumpyarray per station in stat_names. + + Returns: The (timegrid,timestep,TEC) where TEC is a dictionary containing 1 enumpyarray per station in stat_names. If stat_names is not given, the station names will either be extracted from the MS or st1...stN - """ + """ if MS: - (timerange,timestep,pointing,stat_names,stat_positions)=PosTools.getMSinfo(MS) - + (timerange, timestep, pointing, stat_names, stat_positions) = ( + PosTools.getMSinfo(MS) + ) + if use_mean is not None: stat_pos_mean = False if radec: logger.info("Using radec instead of pointing") - pointing = radec + pointing = radec if start_time and end_time: time_in_sec = False @@ -108,8 +111,8 @@ def getRM( raise ValueError("start_time and end_time must be given together") if not stat_names: - stat_names =['st%d'%(i+1) for i in range(len(stat_positions))] - + stat_names = ["st%d" % (i + 1) for i in range(len(stat_positions))] + if timerange != 0: start_time = timerange[0] end_time = timerange[1] @@ -117,207 +120,259 @@ def getRM( reference_time = start_time timerange[0] = start_time - timestep timerange[1] = end_time + timestep - str_start_time=PosTools.obtain_observation_year_month_day_hms(reference_time) + str_start_time = PosTools.obtain_observation_year_month_day_hms(reference_time) else: - timerange,str_start_time,reference_time=PosTools.get_time_range(start_time,end_time,timestep,time_in_sec,0) - if str_start_time==-1: + timerange, str_start_time, reference_time = PosTools.get_time_range( + start_time, end_time, timestep, time_in_sec, 0 + ) + if str_start_time == -1: return - + emm = EMM.EMM() if useEMM else EMM.WMM() - - times,timerange=PosTools.getIONEXtimerange(timerange,timestep) - if len(times[-1])==0 or times[-1][-1]AP(7),P(150) C 2011.00 09/27/10 GLOB7S: P(1)->P(150) -C 2011.00 09/27/10 GTS7: AP(1)->AP(7), PD(150,9)->PDA1(150),..,PDA9(150) +C 2011.00 09/27/10 GTS7: AP(1)->AP(7), PD(150,9)->PDA1(150),..,PDA9(150) C 2012.00 10/05/11 IRI-2012: bottomside B0 B1 model (SHAMDB0D, SHAB1D), C 2012.00 10/05/11 bottomside Ni model (iriflip.for), auroral foE C 2012.00 10/05/11 storm model (storme_ap), Te with PF10.7 (elteik), -C 2012.00 10/05/11 oval kp model (auroral_boundary), IGRF-11(igrf.for), +C 2012.00 10/05/11 oval kp model (auroral_boundary), IGRF-11(igrf.for), C 2012.00 10/05/11 NRLMSIS00 (cira.for), CGM coordinates, F10.7 daily C 2012.00 10/05/11 81-day 365-day indices (apf107.dat), ap->kp (ckp), C 2012.00 10/05/11 array size change jf(50) outf(20,1000), oarr(100). @@ -28,9 +28,9 @@ C NRLMSISE-00 C ----------- C Neutral Atmosphere Empirical Model from the surface to lower C exosphere -C J.M. Picone, A.E. Hedin, D.P. Drob, and A.C. Aikin, NRLMSISE-00 -C empirical model of the atmosphere: Statistical comparisons -C and scientific issues, J. Geophys. Res., 107(A12), 1468, +C J.M. Picone, A.E. Hedin, D.P. Drob, and A.C. Aikin, NRLMSISE-00 +C empirical model of the atmosphere: Statistical comparisons +C and scientific issues, J. Geophys. Res., 107(A12), 1468, C doi:10.1029/2002JA009430, 2002. C C NEW FEATURES: @@ -46,8 +46,8 @@ C their individual variations are not presently separable with C the drag data used to define this model component. C C SUBROUTINES FOR SPECIAL OUTPUTS: -C -C HIGH ALTITUDE DRAG: EFFECTIVE TOTAL MASS DENSITY +C +C HIGH ALTITUDE DRAG: EFFECTIVE TOTAL MASS DENSITY C (SUBROUTINE GTD7D, OUTPUT D(6)) C For atmospheric drag calculations at altitudes above 500 km, C call SUBROUTINE GTD7D to compute the "effective total mass @@ -59,7 +59,7 @@ C See subroutine GHP7 to specify outputs at a pressure level C rather than at an altitude. C C OUTPUT IN M-3 and KG/M3: CALL METERS(.TRUE.) -C +C C INPUT VARIABLES: C IYD - YEAR AND DAY AS YYDDD (day of year from 1 to 365 (or 366)) C (Year ignored in current model) @@ -85,9 +85,9 @@ C MASS - MASS NUMBER (ONLY DENSITY FOR SELECTED GAS IS C CALCULATED. MASS 0 IS TEMPERATURE. MASS 48 FOR ALL. C MASS 17 IS Anomalous O ONLY.) C -C NOTES ON INPUT VARIABLES: +C NOTES ON INPUT VARIABLES: C UT, Local Time, and Longitude are used independently in the -C model and are not of equal importance for every situation. +C model and are not of equal importance for every situation. C For the most physically realistic calculation these three C variables should be consistent (STL=SEC/3600+GLONG/15). C The Equation of Time departures from the above formula @@ -109,7 +109,7 @@ C D(1) - HE NUMBER DENSITY(CM-3) C D(2) - O NUMBER DENSITY(CM-3) C D(3) - N2 NUMBER DENSITY(CM-3) C D(4) - O2 NUMBER DENSITY(CM-3) -C D(5) - AR NUMBER DENSITY(CM-3) +C D(5) - AR NUMBER DENSITY(CM-3) C D(6) - TOTAL MASS DENSITY(GM/CM3) C D(7) - H NUMBER DENSITY(CM-3) C D(8) - N NUMBER DENSITY(CM-3) @@ -118,7 +118,7 @@ C T(1) - EXOSPHERIC TEMPERATURE C T(2) - TEMPERATURE AT ALT C C NOTES ON OUTPUT VARIABLES: -C TO GET OUTPUT IN M-3 and KG/M3: CALL METERS(.TRUE.) +C TO GET OUTPUT IN M-3 and KG/M3: CALL METERS(.TRUE.) C C O, H, and N are set to zero below 72.5 km C @@ -126,7 +126,7 @@ C T(1), Exospheric temperature, is set to global average for C altitudes below 120 km. The 120 km gradient is left at global C average value for altitudes below 72 km. C -C D(6), TOTAL MASS DENSITY, is NOT the same for subroutines GTD7 +C D(6), TOTAL MASS DENSITY, is NOT the same for subroutines GTD7 C and GTD7D C C SUBROUTINE GTD7 -- D(6) is the sum of the mass densities of the @@ -137,11 +137,11 @@ C C SUBROUTINE GTD7D -- D(6) is the "effective total mass density C for drag" and is the sum of the mass densities of all species C in this model, INCLUDING anomalous oxygen. -C +C C SWITCHES: The following is for test and special purposes: -C +C C TO TURN ON AND OFF PARTICULAR VARIATIONS CALL TSELEC(SW), -C WHERE SW IS A 25 ELEMENT ARRAY CONTAINING 0. FOR OFF, 1. +C WHERE SW IS A 25 ELEMENT ARRAY CONTAINING 0. FOR OFF, 1. C FOR ON, OR 2. FOR MAIN EFFECTS OFF BUT CROSS TERMS ON C FOR THE FOLLOWING VARIATIONS C 1 - F10.7 EFFECT ON MEAN 2 - TIME INDEPENDENT @@ -156,16 +156,16 @@ C 16 - ALL TINF VAR 17 - ALL TLB VAR C 18 - ALL TN1 VAR 19 - ALL S VAR C 20 - ALL TN2 VAR 21 - ALL NLB VAR C 22 - ALL TN3 VAR 23 - TURBO SCALE HEIGHT VAR -C NOTES: The default should be sw(1:25)=1.0; Uses the full Ap history -C if sw(9) = -1.0; sw(9)=-1 uses the full ap history and is supposed -C to give the best results for geomagentic storms; sw(9) = 0 turns off +C NOTES: The default should be sw(1:25)=1.0; Uses the full Ap history +C if sw(9) = -1.0; sw(9)=-1 uses the full ap history and is supposed +C to give the best results for geomagentic storms; sw(9) = 0 turns off C all ap variations. C C To get current values of SW: CALL TRETRV(SW) C C Simplified version for F77 compilers and IRI (Sep 27,2010, dbilitza): C GTS7, GLOBE7: AP(1), P(1) -> AP(7), P(150) -C PD(150,9) -> PDA1(150),..,PDA9(150) +C PD(150,9) -> PDA1(150),..,PDA9(150) C----------------------------------------------------------------------- CHARACTER*4 ISDATE,ISTIME,NAME,ISD,IST,NAM DIMENSION D(9),T(2),AP(7),DS(9),TS(2) @@ -305,14 +305,14 @@ C TOTAL MASS DENSITY C IF(MASS.EQ.48) THEN D(6) = 1.66E-24*(4.*D(1)+16.*D(2)+28.*D(3)+32.*D(4)+40.*D(5)+ - & D(7)+14.*D(8)) + & D(7)+14.*D(8)) IF(IMR.EQ.1) D(6)=D(6)/1000. ENDIF T(2)=TZ 10 CONTINUE GOTO 90 50 CONTINUE - DD=DENSM(ALT,1.,0.0,TZ,MN3,ZN3,TN3,TGN3,MN2,ZN2,TN2,TGN2) + DD=DENSM(ALT,1.,0.0,TZ,MN3,ZN3,TN3,TGN3,MN2,ZN2,TN2,TGN2) T(2)=TZ 90 CONTINUE ALAST=ALT @@ -329,7 +329,7 @@ C ----------- C This subroutine provides Effective Total Mass Density for C output D(6) which includes contributions from "anomalous C oxygen" which can affect satellite drag above 500 km. This -C subroutine is part of the distribution package for the +C subroutine is part of the distribution package for the C Neutral Atmosphere Empirical Model from the surface to lower C exosphere. See subroutine GTD7 for more extensive comments. C @@ -358,9 +358,9 @@ C MASS - MASS NUMBER (ONLY DENSITY FOR SELECTED GAS IS C CALCULATED. MASS 0 IS TEMPERATURE. MASS 48 FOR ALL. C MASS 17 IS Anomalous O ONLY.) C -C NOTES ON INPUT VARIABLES: +C NOTES ON INPUT VARIABLES: C UT, Local Time, and Longitude are used independently in the -C model and are not of equal importance for every situation. +C model and are not of equal importance for every situation. C For the most physically realistic calculation these three C variables should be consistent (STL=SEC/3600+GLONG/15). C The Equation of Time departures from the above formula @@ -376,7 +376,7 @@ C D(1) - HE NUMBER DENSITY(CM-3) C D(2) - O NUMBER DENSITY(CM-3) C D(3) - N2 NUMBER DENSITY(CM-3) C D(4) - O2 NUMBER DENSITY(CM-3) -C D(5) - AR NUMBER DENSITY(CM-3) +C D(5) - AR NUMBER DENSITY(CM-3) C D(6) - TOTAL MASS DENSITY(GM/CM3) [includes anomalous oxygen] C D(7) - H NUMBER DENSITY(CM-3) C D(8) - N NUMBER DENSITY(CM-3) @@ -391,7 +391,7 @@ C TOTAL MASS DENSITY C IF(MASS.EQ.48) THEN D(6) = 1.66E-24*(4.*D(1)+16.*D(2)+28.*D(3)+32.*D(4)+40.*D(5)+ - & D(7)+14.*D(8)+16.*D(9)) + & D(7)+14.*D(8)+16.*D(9)) IF(IMR.EQ.1) D(6)=D(6)/1000. ENDIF RETURN @@ -423,7 +423,7 @@ C (7) AVERAGE OF EIGHT 3 HR AP INDICIES FROM 36 TO 59 HRS PRIOR C TO CURRENT TIME C PRESS - PRESSURE LEVEL(MB) C OUTPUT: -C ALT - ALTITUDE(KM) +C ALT - ALTITUDE(KM) C D(1) - HE NUMBER DENSITY(CM-3) C D(2) - O NUMBER DENSITY(CM-3) C D(3) - N2 NUMBER DENSITY(CM-3) @@ -493,7 +493,7 @@ C New altitude estimate using scale height RETURN END C -C +C SUBROUTINE GLATF(LAT,GV,REFF) C----------------------------------------------------------------------- C CALCULATE LATITUDE VARIABLE GRAVITY (GV) AND EFFECTIVE @@ -565,7 +565,7 @@ C Thermospheric portion of NRLMSISE-00 C See GTD7 for more extensive comments C C OUTPUT IN M-3 and KG/M3: CALL METERS(.TRUE.) -C +C C INPUT VARIABLES: C IYD - YEAR AND DAY AS YYDDD (day of year from 1 to 365 (or 366)) C (Year ignored in current model) @@ -591,9 +591,9 @@ C MASS - MASS NUMBER (ONLY DENSITY FOR SELECTED GAS IS C CALCULATED. MASS 0 IS TEMPERATURE. MASS 48 FOR ALL. C MASS 17 IS Anomalous O ONLY.) C -C NOTES ON INPUT VARIABLES: +C NOTES ON INPUT VARIABLES: C UT, Local Time, and Longitude are used independently in the -C model and are not of equal importance for every situation. +C model and are not of equal importance for every situation. C For the most physically realistic calculation these three C variables should be consistent (STL=SEC/3600+GLONG/15). C The Equation of Time departures from the above formula @@ -615,7 +615,7 @@ C D(1) - HE NUMBER DENSITY(CM-3) C D(2) - O NUMBER DENSITY(CM-3) C D(3) - N2 NUMBER DENSITY(CM-3) C D(4) - O2 NUMBER DENSITY(CM-3) -C D(5) - AR NUMBER DENSITY(CM-3) +C D(5) - AR NUMBER DENSITY(CM-3) C D(6) - TOTAL MASS DENSITY(GM/CM3) [Anomalous O NOT included] C D(7) - H NUMBER DENSITY(CM-3) C D(8) - N NUMBER DENSITY(CM-3) @@ -649,7 +649,7 @@ C $ PMA(100,10),SAM(100) DATA ALPHA/-0.38,0.,0.,0.,0.17,0.,-0.38,0.,0./ TNMOD=0 !.. for switching on mod MSIS - IF(D(1).LT.0) TNMOD=-D(1) !.. PGR + IF(D(1).LT.0) TNMOD=-D(1) !.. PGR C Test for changed input V2=VTST7(IYD,SEC,GLAT,GLONG,STL,F107A,F107,AP,2) @@ -711,7 +711,7 @@ C C IF(MASS.EQ.0) GO TO 50 C N2 variation factor at Zlb - G28=SW(21)*GLOBE7(YRD,SEC,GLAT,GLONG,STL,F107A,F107, + G28=SW(21)*GLOBE7(YRD,SEC,GLAT,GLONG,STL,F107A,F107, & AP,PDA3) DAY=AMOD(YRD,1000.) C VARIATION OF TURBOPAUSE HEIGHT @@ -739,7 +739,7 @@ C Diffusive density at Alt DD=D(3) C Turbopause ZH28=PDM(3,3)*ZHF - ZHM28=PDM(4,3)*PDL(6,2) + ZHM28=PDM(4,3)*PDL(6,2) XMD=28.-XMM C Mixed density at Zlb B28=DENSU(ZH28,DB28,TINF,TLB,XMD,ALPHA(3)-1.,TZ,PTM(6),S,MN1, @@ -1040,7 +1040,7 @@ C C FUNCTION GLOBE7(YRD,SEC,LAT,LONG,TLOC,F107A,F107,AP,P) C----------------------------------------------------------------------- -C CALCULATE G(L) FUNCTION +C CALCULATE G(L) FUNCTION C Upper Thermosphere Parameters C----------------------------------------------------------------------- REAL LAT, LONG @@ -1103,7 +1103,7 @@ C PLG(9,2) = (15.*C*PLG(8,2)-8.*PLG(7,2))/7. PLG(7,3)=(11.*C*PLG(6,3)-7.*PLG(5,3))/4. PLG(8,3)=(13.*C*PLG(7,3)-8.*PLG(6,3))/5. PLG(4,4) = 15.*S2*S - PLG(5,4) = 105.*S2*S*C + PLG(5,4) = 105.*S2*S*C PLG(6,4)=(9.*C*PLG(5,4)-7.*PLG(4,4))/2. PLG(7,4)=(11.*C*PLG(6,4)-8.*PLG(5,4))/3. XL=LAT @@ -1162,7 +1162,7 @@ C DIURNAL 200 CONTINUE C SEMIDIURNAL IF(SW(8).EQ.0) GOTO 210 - T81 = (P(24)*PLG(4,3)+P(36)*PLG(6,3))*CD14*SWC(5) + T81 = (P(24)*PLG(4,3)+P(36)*PLG(6,3))*CD14*SWC(5) T82 = (P(34)*PLG(4,3)+P(37)*PLG(6,3))*CD14*SWC(5) T(8) = F2* 1 ((P(6)*PLG(3,3) + P(42)*PLG(5,3) + T81)*C2TLOC @@ -1268,9 +1268,9 @@ C----------------------------------------------------------------------- C SET SWITCHES C Output in COMMON/CSW/SW(25),ISW,SWC(25) C SW FOR MAIN TERMS, SWC FOR CROSS TERMS -C +C C TO TURN ON AND OFF PARTICULAR VARIATIONS CALL TSELEC(SV), -C WHERE SV IS A 25 ELEMENT ARRAY CONTAINING 0. FOR OFF, 1. +C WHERE SV IS A 25 ELEMENT ARRAY CONTAINING 0. FOR OFF, 1. C FOR ON, OR 2. FOR MAIN EFFECTS OFF BUT CROSS TERMS ON C C To get current values of SW: CALL TRETRV(SW) @@ -1324,7 +1324,7 @@ C CONFIRM PARAMETER SET T(J)=0. 10 CONTINUE IF(DAY.NE.DAYL.OR.P32.NE.P(32)) CD32=COS(DR*(DAY-P(32))) - IF(DAY.NE.DAYL.OR.P18.NE.P(18)) CD18=COS(2.*DR*(DAY-P(18))) + IF(DAY.NE.DAYL.OR.P18.NE.P(18)) CD18=COS(2.*DR*(DAY-P(18))) IF(DAY.NE.DAYL.OR.P14.NE.P(14)) CD14=COS(DR*(DAY-P(14))) IF(DAY.NE.DAYL.OR.P39.NE.P(39)) CD39=COS(2.*DR*(DAY-P(39))) DAYL=DAY @@ -1350,7 +1350,7 @@ C DIURNAL IF(SW(7).EQ.0) GOTO 200 T71 = P(12)*PLG(3,2)*CD14*SWC(5) T72 = P(13)*PLG(3,2)*CD14*SWC(5) - T(7) = + T(7) = 1 ((P(4)*PLG(2,2) + P(5)*PLG(4,2) 2 + T71)*CTLOC 4 + (P(7)*PLG(2,2) + P(8)*PLG(4,2) @@ -1358,9 +1358,9 @@ C DIURNAL 200 CONTINUE C SEMIDIURNAL IF(SW(8).EQ.0) GOTO 210 - T81 = (P(24)*PLG(4,3)+P(36)*PLG(6,3))*CD14*SWC(5) + T81 = (P(24)*PLG(4,3)+P(36)*PLG(6,3))*CD14*SWC(5) T82 = (P(34)*PLG(4,3)+P(37)*PLG(6,3))*CD14*SWC(5) - T(8) = + T(8) = 1 ((P(6)*PLG(3,3) + P(42)*PLG(5,3) + T81)*C2TLOC 3 +(P(9)*PLG(3,3) + P(43)*PLG(5,3) + T82)*S2TLOC) 210 CONTINUE @@ -1425,7 +1425,7 @@ C C CALCULATE TEMPERATURE BELOW ZA C Temperature gradient at ZA from Bates profile DTA=(TINF-TA)*S2*((RE+ZLB)/(RE+ZA))**2 - TGN1(1)=DTA + TGN1(1)=DTA TN1(1)=TA Z=AMAX1(ALT,ZN1(MN1)) MN=MN1 @@ -1519,7 +1519,7 @@ C Temperature at altitude TZ=1./Y IF(XM.EQ.0.) GO TO 20 C -C CALCULATE STRATOSPHERE/MESOSPHERE DENSITY +C CALCULATE STRATOSPHERE/MESOSPHERE DENSITY GLB=GSURF/(1.+Z1/RE)**2 GAMM=XM*GLB*ZGDIF/RGAS C Integrate temperature profile @@ -1555,8 +1555,8 @@ C temperature at altitude TZ=1./Y IF(XM.EQ.0.) GO TO 30 C -C CALCULATE TROPOSPHERIC/STRATOSPHERE DENSITY -C +C CALCULATE TROPOSPHERIC/STRATOSPHERE DENSITY +C GLB=GSURF/(1.+Z1/RE)**2 GAMM=XM*GLB*ZGDIF/RGAS C Integrate temperature profile @@ -1625,7 +1625,7 @@ C X: ABSCISSA FOR INTERPOLATION C Y: OUTPUT VALUE C----------------------------------------------------------------------- DIMENSION XA(N),YA(N),Y2A(N) - LOGICAL mess + LOGICAL mess COMMON/iounit/konsol,mess SAVE KLO=1 @@ -1698,7 +1698,7 @@ C DNET - combined density C----------------------------------------------------------------------- LOGICAL mess COMMON/iounit/konsol,mess - + SAVE A=ZHM/(XMM-XM) IF(DM.GT.0.AND.DD.GT.0) GOTO 5 @@ -1772,7 +1772,7 @@ C C BLOCK DATA GTD7BK C----------------------------------------------------------------------- -C MSISE-00 01-FEB-02 +C MSISE-00 01-FEB-02 C----------------------------------------------------------------------- COMMON/PARM7/PT1(50),PT2(50),PT3(50),PA1(50),PA2(50),PA3(50), $ PB1(50),PB2(50),PB3(50),PC1(50),PC2(50),PC3(50), @@ -2133,7 +2133,7 @@ C HOT O DENSITY * 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, * 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, * 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00, 0.00000E+00/ -C S PARAM +C S PARAM DATA PJ1/ * 9.56827E-01, 6.20637E-02, 3.18433E-02, 0.00000E+00, 0.00000E+00, * 3.94900E-02, 0.00000E+00, 0.00000E+00,-9.24882E-03,-7.94023E-03, diff --git a/RMextract/pyiri/dgrf1945.dat b/RMextract/pyiri/dgrf1945.dat index db34352..641d718 100644 --- a/RMextract/pyiri/dgrf1945.dat +++ b/RMextract/pyiri/dgrf1945.dat @@ -1,4 +1,4 @@ - dgrf1945 + dgrf1945 10 6371.2 1945.0 -30594 -2285 diff --git a/RMextract/pyiri/dgrf1950.dat b/RMextract/pyiri/dgrf1950.dat index 7a2b288..b82cca7 100644 --- a/RMextract/pyiri/dgrf1950.dat +++ b/RMextract/pyiri/dgrf1950.dat @@ -1,4 +1,4 @@ - dgrf1950 + dgrf1950 10 6371.2 1950.0 -30554 -2250 diff --git a/RMextract/pyiri/dgrf1955.dat b/RMextract/pyiri/dgrf1955.dat index fa3dbc4..6dda483 100644 --- a/RMextract/pyiri/dgrf1955.dat +++ b/RMextract/pyiri/dgrf1955.dat @@ -1,4 +1,4 @@ - dgrf1955 + dgrf1955 10 6371.2 1955.0 -30500 -2215 diff --git a/RMextract/pyiri/dgrf1960.dat b/RMextract/pyiri/dgrf1960.dat index 4a23838..8789036 100644 --- a/RMextract/pyiri/dgrf1960.dat +++ b/RMextract/pyiri/dgrf1960.dat @@ -1,4 +1,4 @@ - dgrf1960 + dgrf1960 10 6371.2 1960.0 -30421 -2169 diff --git a/RMextract/pyiri/dgrf1965.dat b/RMextract/pyiri/dgrf1965.dat index c395550..16a5d78 100644 --- a/RMextract/pyiri/dgrf1965.dat +++ b/RMextract/pyiri/dgrf1965.dat @@ -1,4 +1,4 @@ - dgrf1965 + dgrf1965 10 6371.2 1965.0 -30334 -2119 diff --git a/RMextract/pyiri/dgrf1970.dat b/RMextract/pyiri/dgrf1970.dat index 99b6aba..7b4ecee 100644 --- a/RMextract/pyiri/dgrf1970.dat +++ b/RMextract/pyiri/dgrf1970.dat @@ -1,4 +1,4 @@ - dgrf1970 + dgrf1970 10 6371.2 1970.0 -30220 -2068 diff --git a/RMextract/pyiri/dgrf1975.dat b/RMextract/pyiri/dgrf1975.dat index 4523804..3d8e4eb 100644 --- a/RMextract/pyiri/dgrf1975.dat +++ b/RMextract/pyiri/dgrf1975.dat @@ -1,4 +1,4 @@ - dgrf1975 + dgrf1975 10 6371.2 1975.0 -30100 -2013 diff --git a/RMextract/pyiri/dgrf1980.dat b/RMextract/pyiri/dgrf1980.dat index 12e723a..bcd7adf 100644 --- a/RMextract/pyiri/dgrf1980.dat +++ b/RMextract/pyiri/dgrf1980.dat @@ -1,4 +1,4 @@ - dgrf1980 + dgrf1980 10 6371.2 1980.0 -29992 -1956 diff --git a/RMextract/pyiri/dgrf1985.dat b/RMextract/pyiri/dgrf1985.dat index 033ff2d..f7b4a14 100644 --- a/RMextract/pyiri/dgrf1985.dat +++ b/RMextract/pyiri/dgrf1985.dat @@ -1,4 +1,4 @@ - dgrf1985 + dgrf1985 10 6371.2 1985.0 -29873 -1905 diff --git a/RMextract/pyiri/dgrf1990.dat b/RMextract/pyiri/dgrf1990.dat index 219d891..59075c9 100644 --- a/RMextract/pyiri/dgrf1990.dat +++ b/RMextract/pyiri/dgrf1990.dat @@ -1,4 +1,4 @@ - dgrf1990 + dgrf1990 10 6371.2 1990.0 -29775 -1848 diff --git a/RMextract/pyiri/dgrf1995.dat b/RMextract/pyiri/dgrf1995.dat index 7e5e0db..df06365 100644 --- a/RMextract/pyiri/dgrf1995.dat +++ b/RMextract/pyiri/dgrf1995.dat @@ -1,4 +1,4 @@ - dgrf1995 + dgrf1995 10 6371.2 1995.0 -29692 -1784 diff --git a/RMextract/pyiri/dgrf2000.dat b/RMextract/pyiri/dgrf2000.dat index a4ad108..2ca722f 100644 --- a/RMextract/pyiri/dgrf2000.dat +++ b/RMextract/pyiri/dgrf2000.dat @@ -1,4 +1,4 @@ - dgrf2000 + dgrf2000 13 6371.2 2000.0 -29619.4 -1728.2 diff --git a/RMextract/pyiri/dgrf2005.dat b/RMextract/pyiri/dgrf2005.dat index b2312f1..a90c697 100644 --- a/RMextract/pyiri/dgrf2005.dat +++ b/RMextract/pyiri/dgrf2005.dat @@ -1,4 +1,4 @@ - dgrf2005 + dgrf2005 13 6371.2 2005.0 -29554.63 -1669.05 diff --git a/RMextract/pyiri/dgrf2010.dat b/RMextract/pyiri/dgrf2010.dat index 12aea5d..81147b0 100644 --- a/RMextract/pyiri/dgrf2010.dat +++ b/RMextract/pyiri/dgrf2010.dat @@ -1,4 +1,4 @@ - dgrf2010 + dgrf2010 13 6371.2 2010.0 -29496.57 -1586.42 diff --git a/RMextract/pyiri/dgrf2015.dat b/RMextract/pyiri/dgrf2015.dat index 3273b44..7683b0f 100644 --- a/RMextract/pyiri/dgrf2015.dat +++ b/RMextract/pyiri/dgrf2015.dat @@ -1,4 +1,4 @@ - dgrf2015 + dgrf2015 13 6371.2 2015.0 -29441.46 -1501.77 diff --git a/RMextract/pyiri/ig_rz.dat b/RMextract/pyiri/ig_rz.dat index c70bc5c..64710d7 100644 --- a/RMextract/pyiri/ig_rz.dat +++ b/RMextract/pyiri/ig_rz.dat @@ -61,12 +61,12 @@ 75.5, 75.8, 75.1, 74.5, 75.4, 78.0, 79.4, 81.6, 86.6, 90.8, 92.1, 91.8, 92.1, 92.5, 93.2, 94.8, 95.6, 96.0, 96.8, 96.8, 94.4, 92.0, 91.4, 91.2, 90.1, 88.1, 85.0, 81.0, 76.4, 71.3, 66.5, 62.0, 58.5, 55.5, 53.0, 50.1, - 49.8, 46.9, 46.4, 46.4, 46.9, 47.2, 49.3, 50.6, 60.7, 58.0, 56.7, 57.4, + 49.8, 46.9, 46.4, 46.4, 46.9, 47.2, 49.3, 50.6, 60.7, 58.0, 56.7, 57.4, 52.7, 50.7, 46.4, 49.3, 42.2, 35.9, 35.7, 28.9, 26.5, 24.6, 26.4, 27.8, 28.1, 31.7, 35.7, 36.9, 32.1, 33.3, 38.0, 40.0, 42.1, 44.1, 46.7, 47.5, - 50.3, 51.2, 52.7, 54.0, 55.9, 58.2, 58.3, 62.3, 62.5, 62.7, 64.1, 64.6, + 50.3, 51.2, 52.7, 54.0, 55.9, 58.2, 58.3, 62.3, 62.5, 62.7, 64.1, 64.6, 65.5, - + 200.1, 199.0,200.9,201.3,196.8,191.4,186.8,185.2,184.9,183.8,182.2,180.7,180.5, 178.6,176.9,174.5,169.2,165.1,161.4,155.8,151.3,146.3,141.1,137.2,132.5, @@ -120,15 +120,14 @@ 11.9, 11.5, 10.7, 9.9, 8.7, 7.7, 7.0, 6.0, 5.9, 6.0, 5.7, 4.9, 4.2, 3.6, 3.3, 3.4, 3.5, 3.3, 2.8, 2.7, 2.3, 1.8, 1.7, 1.7, 1.8, 1.9, 2.0, 2.2, 2.3, 2.7, 3.6, 4.8, 6.2, 7.1, 7.6, 8.3, - 9.3, 10.6, 12.3, 14.0, 15.5, 16.4, 16.7, 17.4, 19.6, 23.2, 26.5, 28.8, - 30.9, 33.4, 36.9, 41.8, 47.6, 53.2, 57.3, 59.0, 59.5, 59.9, 61.1, 63.4, - 65.5, 66.9, 66.8, 64.6, 61.7, 58.9, 57.8, 58.2, 58.1, 58.6, 59.7, 59.6, + 9.3, 10.6, 12.3, 14.0, 15.5, 16.4, 16.7, 17.4, 19.6, 23.2, 26.5, 28.8, + 30.9, 33.4, 36.9, 41.8, 47.6, 53.2, 57.3, 59.0, 59.5, 59.9, 61.1, 63.4, + 65.5, 66.9, 66.8, 64.6, 61.7, 58.9, 57.8, 58.2, 58.1, 58.6, 59.7, 59.6, 58.7, 58.4, 57.5, 57.8, 59.8, 62.6, 65.4, 68.9, 73.1, 75.0, 75.4, 76.0, 77.4, 78.4, 80.9, 82.0, 80.6, 79.8, 78.7, 75.6, 71.0, 67.5, 65.5, 64.7, 64.3, 63.7, 62.9, 62.5, 62.3, 61.1, 60.1, 60.6, 62.2, 63.2, 63.3, 62.5, 61.3, 60.0, 58.1, 56.2, 54.8, 53.5, 51.3, 49.2, 47.7, 46.6, 45.1, 43.5, - 41.9, 40.5, 38.9, 37.5, 36.4, 35.4, 34.4, 33.4, 32.2, 31.0, 29.9, 28.8, + 41.9, 40.5, 38.9, 37.5, 36.4, 35.4, 34.4, 33.4, 32.2, 31.0, 29.9, 28.8, 27.4, 25.8, 24.5, 23.5, 22.7, 21.9, 21.0, 20.1, 19.2, 18.6, 18.2, 17.7, 17.5, 17.0, 16.5, 15.9, 15.2, 14.4, 13.8, 13.3, 12.5, 11.8, 11.1, 10.4, 9.7, - diff --git a/RMextract/pyiri/igrf.for b/RMextract/pyiri/igrf.for index e673dd4..074def7 100644 --- a/RMextract/pyiri/igrf.for +++ b/RMextract/pyiri/igrf.for @@ -1,28 +1,28 @@ c igrf.for, version number can be found at the end of this comment. -c----------------------------------------------------------------------- +c----------------------------------------------------------------------- C -C Subroutines to compute IGRF parameters for IRI and all functions and +C Subroutines to compute IGRF parameters for IRI and all functions and C subroutines required for this computation, including: -C IGRF_SUB, IGRF_DIP, FINDB0, SHELLG, STOER, FELDG, FELDCOF, GETSHC, +C IGRF_SUB, IGRF_DIP, FINDB0, SHELLG, STOER, FELDG, FELDCOF, GETSHC, C INTERSHC, EXTRASHC, GEODIP, fmodip C -C CGM coordinates : GEOCGM01, OVL_ANG, CGMGLA, CGMGLO, DFR1DR, -C AZM_ANG, MLTUT, MFC, FTPRNT, GEOLOW, CORGEO, GEOCOR, SHAG, RIGHT, +C CGM coordinates : GEOCGM01, OVL_ANG, CGMGLA, CGMGLO, DFR1DR, +C AZM_ANG, MLTUT, MFC, FTPRNT, GEOLOW, CORGEO, GEOCOR, SHAG, RIGHT, C IGRF, RECALC, SPHCAR, BSPCAR, GEOMAG, MAGSM, SMGSM C C MLT: CLCMLT, DPMTRX c- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -c Required i/o units: +c Required i/o units: c KONSOL= 6 Program messages (used when jf(12)=.true. -> konsol) c KONSOL=11 Program messages (used when jf(12)=.false. -> MESSAGES.TXT) c -c COMMON/iounit/konsol,mess is used to pass the value of KONSOL from +c COMMON/iounit/konsol,mess is used to pass the value of KONSOL from c IRISUB to IRIFUN and IGRF. If mess=false then messages are turned off. -c +c c UNIT=14 IGRF/GETSHC: IGRF coeff. (DGRF%%%%.DAT or IGRF%%%%.DAT, %%%%=year) c- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - C Corrections: -C 11/01/91 SHELLG: lowest starting point for B0 search is 2 +C 11/01/91 SHELLG: lowest starting point for B0 search is 2 C 1/27/92 Adopted to IGRF-91 coeffcients model C 2/05/92 Reduce variable names: INTER(P)SHC,EXTRA(P)SHC,INITI(ALI)ZE C 8/08/95 Updated to IGRF-45-95; new coeff. DGRF90, IGRF95, IGRF95S @@ -35,27 +35,27 @@ c 2000.01 10/28/02 replace TAB/6 blanks, enforce 72/line (D. Simpson) C 2000.02 11/08/02 change unit for coefficients to 14 C 2000.03 06/05/03 correct DIPL computation (V. Truhlik) C 2005.00 04/25/05 CALL FELDI and DO 1111 I=1,7 (Alexey Petrov) -C 2005.01 11/10/05 added igrf_dip and geodip (MLAT) +C 2005.01 11/10/05 added igrf_dip and geodip (MLAT) C 2005.02 11/10/05 FELDCOF: updated to IGRF-10 version C 2005.03 12/21/06 GH2(120) -> GH2(144) C 2007.00 05/18/07 Release of IRI-2007 -C 2007.08 07/30/09 SHELLG,STOER,FELDG,FELDCOF: NMAX=13; H/G-arrays(195) +C 2007.08 07/30/09 SHELLG,STOER,FELDG,FELDCOF: NMAX=13; H/G-arrays(195) C 2007.10 02/26/10 FELDCOF: updated to IGRF-11; DGRF05, IGRF10, IGRF10S C 2007.11 04/27/10 RECALC: updated to IGRF-11 -C 2007.11 04/27/10 Make all arrays(195) to arrays(196) +C 2007.11 04/27/10 Make all arrays(195) to arrays(196) C 2007.11 04/27/10 FELDCOF: corrected Filmod and also IGRF10.DAT C 2007.11 04/29/10 New files dgrf%%%%.asc; new GETSHC; char*12 to 13 C C 2012.00 10/05/11 IRI-2012: bottomside B0 B1 model (SHAMDB0D, SHAB1D), C 2012.00 10/05/11 bottomside Ni model (iriflip.for), auroral foE C 2012.00 10/05/11 storm model (storme_ap), Te with PF10.7 (elteik), -C 2012.00 10/05/11 oval kp model (auroral_boundary), IGRF-11(igrf.for), +C 2012.00 10/05/11 oval kp model (auroral_boundary), IGRF-11(igrf.for), C 2012.00 10/05/11 NRLMSIS00 (cira.for), CGM coordinates, F10.7 daily C 2012.00 10/05/11 81-day 365-day indices (apf107.dat), ap->kp (ckp), C 2012.00 10/05/11 array size change jf(50) outf(20,1000), oarr(100). C 2012.01 12/17/12 igrf_dip: Add magnetic declination as output parameter C 2012.02 07/20/14 igrf_dip,FTPRNT,RECALC: ASIN(x): abs(x)>1.0 x=sign(1.,x) -C 2012.03 07/24/14 COMMON/iounit: added 'mess' +C 2012.03 07/24/14 COMMON/iounit: added 'mess' C 2012.04 02/10/15 Updating to IGRF-12 (2015) C 2012.05 07/12/15 use mess,konsol in IGRF and RECALC C 2012.06 04/16/18 Versioning now based on year of major releases @@ -68,16 +68,16 @@ C 2016.03 02/17/16 GEODIP: add PI to CONST C 2016.04 07/07/17 IGRF: updated with newest 2010, 2015, 2015s coeff. C 2016.05 03/25/19 GEODIP,SPHCAR,GEOMAG: improved COMMENTS C 2016.06 03/05/20 Updating to IGRF-13 (2020) -c----------------------------------------------------------------------- -C +c----------------------------------------------------------------------- +C subroutine igrf_sub(xlat,xlong,year,height, & xl,icode,dipl,babs) -c----------------------------------------------------------------------- +c----------------------------------------------------------------------- c INPUT: c xlat geodatic latitude in degrees c xlong geodatic longitude in degrees -c year decimal year (year+(month-0.5)/12.0-0.5 or -c year+day-of-year/365 or ../366 if leap year) +c year decimal year (year+(month-0.5)/12.0-0.5 or +c year+day-of-year/365 or ../366 if leap year) c height height in km c OUTPUT: c xl L value @@ -85,11 +85,11 @@ c icode =1 L is correct; =2 L is not correct; c =3 an approximation is used c dipl dip latitude in degrees c babs magnetic field strength in Gauss -c----------------------------------------------------------------------- +c----------------------------------------------------------------------- REAL LATI,LONGI COMMON /CONST/UMR,PI - + lati=xlat longi=xlong c CALL FELDCOF(YEAR,DIMO) @@ -101,19 +101,19 @@ c CALL FELDCOF(YEAR,DIMO) c c subroutine igrf_dip(xlat,xlong,year,height,dec,dip,dipl,ymodip) -c----------------------------------------------------------------------- +c----------------------------------------------------------------------- c INPUT: c xlat geodatic latitude in degrees c xlong geodatic longitude in degrees -c year decimal year (year+month/12.0-0.5 or -c year+day-of-year/365 or ../366 if leap year) +c year decimal year (year+month/12.0-0.5 or +c year+day-of-year/365 or ../366 if leap year) c height height in km c OUTPUT: c dec magnetic declination in degrees c dip magnetic inclination (dip) in degrees c dipl dip latitude in degrees -c ymodip modified dip latitude = asin{dip/sqrt[dip^2+cos(LATI)]} -c----------------------------------------------------------------------- +c ymodip modified dip latitude = asin{dip/sqrt[dip^2+cos(LATI)]} +c----------------------------------------------------------------------- COMMON /CONST/UMR,PI @@ -130,10 +130,10 @@ c CALL FELDCOF(YEAR,DIMO) DIP=ASIN(BDBA) dipdiv=DIP/SQRT(DIP*DIP+cos(XLATI*UMR)) IF(ABS(dipdiv).GT.1.) dipdiv=SIGN(1.,dipdiv) - SMODIP=ASIN(dipdiv) + SMODIP=ASIN(dipdiv) c DIPL1=ATAN(0.5*TAN(DIP))/UMR DIPL=ATAN(BDOWN/2.0/sqrt(BNORTH*BNORTH+BEAST*BEAST))/umr - YMODIP=SMODIP/UMR + YMODIP=SMODIP/UMR DEC=DEC/UMR DIP=DIP/UMR RETURN @@ -142,7 +142,7 @@ c c C SHELLIG.FOR C -C 11/01/91 SHELLG: lowest starting point for B0 search is 2 +C 11/01/91 SHELLG: lowest starting point for B0 search is 2 C 1/27/92 Adopted to IGRF-91 coeffcients model C 2/05/92 Reduce variable-names: INTER(P)SHC,EXTRA(P)SHC,INITI(ALI)ZE C 8/08/95 Updated to IGRF-45-95; new coeff. DGRF90, IGRF95, IGRF95S @@ -164,18 +164,18 @@ C C SUBROUTINE SHELLG(GLAT,GLON,ALT,FL,ICODE,B0) c SUBROUTINE SHELLG(GLAT,GLON,ALT,DIMO,FL,ICODE,B0) -c----------------------------------------------------------------------- +c----------------------------------------------------------------------- C CALCULATES L-VALUE FOR SPECIFIED GEODAETIC COORDINATES, ALTITUDE C AND GEMAGNETIC FIELD MODEL. -C REF: G. KLUGE, EUROPEAN SPACE OPERATIONS CENTER, INTERNAL NOTE +C REF: G. KLUGE, EUROPEAN SPACE OPERATIONS CENTER, INTERNAL NOTE C NO. 67, 1970. C G. KLUGE, COMPUTER PHYSICS COMMUNICATIONS 3, 31-35, 1972 -c----------------------------------------------------------------------- +c----------------------------------------------------------------------- C CHANGES (D. BILITZA, NOV 87): C - USING CORRECT DIPOL MOMENT I.E.,DIFFERENT COMMON/MODEL/ C - USING IGRF EARTH MAGNETIC FIELD MODELS FROM 1945 TO 1990 C 09/07/22 NMAX=13 for DGRF00 and IGRF05; H/G-arrays(195) -c----------------------------------------------------------------------- +c----------------------------------------------------------------------- C INPUT: ENTRY POINT SHELLG C GLAT GEODETIC LATITUDE IN DEGREES (NORTH) C GLON GEODETIC LONGITUDE IN DEGREES (EAST) @@ -187,12 +187,12 @@ C X-AXIS POINTING TO EQUATOR AT 0 LONGITUDE C Y-AXIS POINTING TO EQUATOR AT 90 LONG. C Z-AXIS POINTING TO NORTH POLE C -C DIMO DIPOL MOMENT IN GAUSS (NORMALIZED TO EARTH RADIUS) +C DIMO DIPOL MOMENT IN GAUSS (NORMALIZED TO EARTH RADIUS) C -C COMMON +C COMMON C X(3) NOT USED C H(144) FIELD MODEL COEFFICIENTS ADJUSTED FOR SHELLG -c----------------------------------------------------------------------- +c----------------------------------------------------------------------- C OUTPUT: FL L-VALUE C ICODE =1 NORMAL COMPLETION C =2 UNPHYSICAL CONJUGATE POINT (FL MEANINGLESS) @@ -200,69 +200,69 @@ C =3 SHELL PARAMETER GREATER THAN LIMIT UP TO C WHICH ACCURATE CALCULATION IS REQUIRED; C APPROXIMATION IS USED. C B0 MAGNETIC FIELD STRENGTH IN GAUSS -c----------------------------------------------------------------------- +c----------------------------------------------------------------------- DIMENSION V(3),U(3,3),P(8,100),SP(3) COMMON/IGRF2/ X(3),H(196) - COMMON/FIDB0/ SP /CONST/UMR,PI + COMMON/FIDB0/ SP /CONST/UMR,PI COMMON/IGRF1/ ERA,AQUAD,BQUAD,DIMO C C-- RMIN, RMAX ARE BOUNDARIES FOR IDENTIFICATION OF ICODE=2 AND 3 C-- STEP IS STEP SIZE FOR FIELD LINE TRACING C-- STEQ IS STEP SIZE FOR INTEGRATION -C +C DATA RMIN,RMAX /0.05,1.01/ DATA STEP,STEQ /0.20,0.03/ BEQU=1.E10 C*****ENTRY POINT SHELLG TO BE USED WITH GEODETIC CO-ORDINATES RLAT=GLAT*UMR - CT=SIN(RLAT) - ST=COS(RLAT) + CT=SIN(RLAT) + ST=COS(RLAT) D=SQRT(AQUAD-(AQUAD-BQUAD)*CT*CT) X(1)=(ALT+AQUAD/D)*ST/ERA X(3)=(ALT+BQUAD/D)*CT/ERA RLON=GLON*UMR - X(2)=X(1)*SIN(RLON) - X(1)=X(1)*COS(RLON) - GOTO9 - ENTRY SHELLC(V,FL,B0) + X(2)=X(1)*SIN(RLON) + X(1)=X(1)*COS(RLON) + GOTO9 + ENTRY SHELLC(V,FL,B0) C*****ENTRY POINT SHELLC TO BE USED WITH CARTESIAN CO-ORDINATES - X(1)=V(1) - X(2)=V(2) - X(3)=V(3) -C*****CONVERT TO DIPOL-ORIENTED CO-ORDINATES - DATA U/ +0.3511737,-0.9148385,-0.1993679, - A +0.9335804,+0.3583680,+0.0000000, - B +0.0714471,-0.1861260,+0.9799247/ + X(1)=V(1) + X(2)=V(2) + X(3)=V(3) +C*****CONVERT TO DIPOL-ORIENTED CO-ORDINATES + DATA U/ +0.3511737,-0.9148385,-0.1993679, + A +0.9335804,+0.3583680,+0.0000000, + B +0.0714471,-0.1861260,+0.9799247/ 9 RQ=1./(X(1)*X(1)+X(2)*X(2)+X(3)*X(3)) - R3H=SQRT(RQ*SQRT(RQ)) - P(1,2)=(X(1)*U(1,1)+X(2)*U(2,1)+X(3)*U(3,1))*R3H - P(2,2)=(X(1)*U(1,2)+X(2)*U(2,2) )*R3H - P(3,2)=(X(1)*U(1,3)+X(2)*U(2,3)+X(3)*U(3,3))*RQ -C*****FIRST THREE POINTS OF FIELD LINE - STEP=-SIGN(STEP,P(3,2)) - CALL STOER(P(1,2),BQ2,R2) - B0=SQRT(BQ2) - P(1,3)=P(1,2)+0.5*STEP*P(4,2) - P(2,3)=P(2,2)+0.5*STEP*P(5,2) - P(3,3)=P(3,2)+0.5*STEP - CALL STOER(P(1,3),BQ3,R3) - P(1,1)=P(1,2)-STEP*(2.*P(4,2)-P(4,3)) - P(2,1)=P(2,2)-STEP*(2.*P(5,2)-P(5,3)) - P(3,1)=P(3,2)-STEP - CALL STOER(P(1,1),BQ1,R1) - P(1,3)=P(1,2)+STEP*(20.*P(4,3)-3.*P(4,2)+P(4,1))/18. - P(2,3)=P(2,2)+STEP*(20.*P(5,3)-3.*P(5,2)+P(5,1))/18. - P(3,3)=P(3,2)+STEP - CALL STOER(P(1,3),BQ3,R3) -C*****INVERT SENSE IF REQUIRED - IF(BQ3.LE.BQ1)GOTO2 - STEP=-STEP - R3=R1 - BQ3=BQ1 - DO 1 I=1,7 - ZZ=P(I,1) - P(I,1)=P(I,3) -1 P(I,3)=ZZ + R3H=SQRT(RQ*SQRT(RQ)) + P(1,2)=(X(1)*U(1,1)+X(2)*U(2,1)+X(3)*U(3,1))*R3H + P(2,2)=(X(1)*U(1,2)+X(2)*U(2,2) )*R3H + P(3,2)=(X(1)*U(1,3)+X(2)*U(2,3)+X(3)*U(3,3))*RQ +C*****FIRST THREE POINTS OF FIELD LINE + STEP=-SIGN(STEP,P(3,2)) + CALL STOER(P(1,2),BQ2,R2) + B0=SQRT(BQ2) + P(1,3)=P(1,2)+0.5*STEP*P(4,2) + P(2,3)=P(2,2)+0.5*STEP*P(5,2) + P(3,3)=P(3,2)+0.5*STEP + CALL STOER(P(1,3),BQ3,R3) + P(1,1)=P(1,2)-STEP*(2.*P(4,2)-P(4,3)) + P(2,1)=P(2,2)-STEP*(2.*P(5,2)-P(5,3)) + P(3,1)=P(3,2)-STEP + CALL STOER(P(1,1),BQ1,R1) + P(1,3)=P(1,2)+STEP*(20.*P(4,3)-3.*P(4,2)+P(4,1))/18. + P(2,3)=P(2,2)+STEP*(20.*P(5,3)-3.*P(5,2)+P(5,1))/18. + P(3,3)=P(3,2)+STEP + CALL STOER(P(1,3),BQ3,R3) +C*****INVERT SENSE IF REQUIRED + IF(BQ3.LE.BQ1)GOTO2 + STEP=-STEP + R3=R1 + BQ3=BQ1 + DO 1 I=1,7 + ZZ=P(I,1) + P(I,1)=P(I,3) +1 P(I,3)=ZZ C*****SEARCH FOR LOWEST MAGNETIC FIELD STRENGTH 2 IF(BQ1.LT.BEQU) THEN BEQU=BQ1 @@ -276,83 +276,83 @@ C*****SEARCH FOR LOWEST MAGNETIC FIELD STRENGTH BEQU=BQ3 IEQU=3 ENDIF -C*****INITIALIZATION OF INTEGRATION LOOPS +C*****INITIALIZATION OF INTEGRATION LOOPS STEP12=STEP/12. - STEP2=STEP+STEP - STEQ=SIGN(STEQ,STEP) - FI=0. - ICODE=1 - ORADIK=0. - OTERM=0. - STP=R2*STEQ - Z=P(3,2)+STP + STEP2=STEP+STEP + STEQ=SIGN(STEQ,STEP) + FI=0. + ICODE=1 + ORADIK=0. + OTERM=0. + STP=R2*STEQ + Z=P(3,2)+STP STP=STP/0.75 - P(8,1)=STEP2*(P(1,1)*P(4,1)+P(2,1)*P(5,1)) + P(8,1)=STEP2*(P(1,1)*P(4,1)+P(2,1)*P(5,1)) P(8,2)=STEP2*(P(1,2)*P(4,2)+P(2,2)*P(5,2)) -C*****MAIN LOOP (FIELD LINE TRACING) - DO 3 N=3,3333 -C*****CORRECTOR (FIELD LINE TRACING) - P(1,N)=P(1,N-1)+STEP12*(5.*P(4,N)+8.*P(4,N-1)-P(4,N-2)) - P(2,N)=P(2,N-1)+STEP12*(5.*P(5,N)+8.*P(5,N-1)-P(5,N-2)) -C*****PREPARE EXPANSION COEFFICIENTS FOR INTERPOLATION -C*****OF SLOWLY VARYING QUANTITIES - P(8,N)=STEP2*(P(1,N)*P(4,N)+P(2,N)*P(5,N)) - C0=P(1,N-1)**2+P(2,N-1)**2 - C1=P(8,N-1) - C2=(P(8,N)-P(8,N-2))*0.25 +C*****MAIN LOOP (FIELD LINE TRACING) + DO 3 N=3,3333 +C*****CORRECTOR (FIELD LINE TRACING) + P(1,N)=P(1,N-1)+STEP12*(5.*P(4,N)+8.*P(4,N-1)-P(4,N-2)) + P(2,N)=P(2,N-1)+STEP12*(5.*P(5,N)+8.*P(5,N-1)-P(5,N-2)) +C*****PREPARE EXPANSION COEFFICIENTS FOR INTERPOLATION +C*****OF SLOWLY VARYING QUANTITIES + P(8,N)=STEP2*(P(1,N)*P(4,N)+P(2,N)*P(5,N)) + C0=P(1,N-1)**2+P(2,N-1)**2 + C1=P(8,N-1) + C2=(P(8,N)-P(8,N-2))*0.25 C3=(P(8,N)+P(8,N-2)-C1-C1)/6.0 - D0=P(6,N-1) + D0=P(6,N-1) D1=(P(6,N)-P(6,N-2))*0.5 - D2=(P(6,N)+P(6,N-2)-D0-D0)*0.5 + D2=(P(6,N)+P(6,N-2)-D0-D0)*0.5 E0=P(7,N-1) - E1=(P(7,N)-P(7,N-2))*0.5 - E2=(P(7,N)+P(7,N-2)-E0-E0)*0.5 -C*****INNER LOOP (FOR QUADRATURE) -4 T=(Z-P(3,N-1))/STEP - IF(T.GT.1.)GOTO5 - HLI=0.5*(((C3*T+C2)*T+C1)*T+C0) + E1=(P(7,N)-P(7,N-2))*0.5 + E2=(P(7,N)+P(7,N-2)-E0-E0)*0.5 +C*****INNER LOOP (FOR QUADRATURE) +4 T=(Z-P(3,N-1))/STEP + IF(T.GT.1.)GOTO5 + HLI=0.5*(((C3*T+C2)*T+C1)*T+C0) ZQ=Z*Z R=HLI+SQRT(HLI*HLI+ZQ) - IF(R.LE.RMIN)GOTO30 + IF(R.LE.RMIN)GOTO30 RQ=R*R - FF=SQRT(1.+3.*ZQ/RQ) - RADIK=B0-((D2*T+D1)*T+D0)*R*RQ*FF - IF(R-RMAX)44,44,45 -45 ICODE=2 - RADIK=RADIK-12.*(R-RMAX)**2 + FF=SQRT(1.+3.*ZQ/RQ) + RADIK=B0-((D2*T+D1)*T+D0)*R*RQ*FF + IF(R-RMAX)44,44,45 +45 ICODE=2 + RADIK=RADIK-12.*(R-RMAX)**2 44 IF(RADIK+RADIK.LE.ORADIK) GOTO 10 - TERM=SQRT(RADIK)*FF*((E2*T+E1)*T+E0)/(RQ+ZQ) - FI=FI+STP*(OTERM+TERM) - ORADIK=RADIK - OTERM=TERM - STP=R*STEQ - Z=Z+STP - GOTO4 -C*****PREDICTOR (FIELD LINE TRACING) -5 P(1,N+1)=P(1,N)+STEP12*(23.*P(4,N)-16.*P(4,N-1)+5.*P(4,N-2)) - P(2,N+1)=P(2,N)+STEP12*(23.*P(5,N)-16.*P(5,N-1)+5.*P(5,N-2)) - P(3,N+1)=P(3,N)+STEP - CALL STOER(P(1,N+1),BQ3,R3) + TERM=SQRT(RADIK)*FF*((E2*T+E1)*T+E0)/(RQ+ZQ) + FI=FI+STP*(OTERM+TERM) + ORADIK=RADIK + OTERM=TERM + STP=R*STEQ + Z=Z+STP + GOTO4 +C*****PREDICTOR (FIELD LINE TRACING) +5 P(1,N+1)=P(1,N)+STEP12*(23.*P(4,N)-16.*P(4,N-1)+5.*P(4,N-2)) + P(2,N+1)=P(2,N)+STEP12*(23.*P(5,N)-16.*P(5,N-1)+5.*P(5,N-2)) + P(3,N+1)=P(3,N)+STEP + CALL STOER(P(1,N+1),BQ3,R3) C*****SEARCH FOR LOWEST MAGNETIC FIELD STRENGTH IF(BQ3.LT.BEQU) THEN IEQU=N+1 BEQU=BQ3 ENDIF 3 CONTINUE -10 IF(IEQU.lt.2) IEQU=2 +10 IF(IEQU.lt.2) IEQU=2 SP(1)=P(1,IEQU-1) SP(2)=P(2,IEQU-1) SP(3)=P(3,IEQU-1) - IF(ORADIK.LT.1E-15)GOTO11 - FI=FI+STP/0.75*OTERM*ORADIK/(ORADIK-RADIK) + IF(ORADIK.LT.1E-15)GOTO11 + FI=FI+STP/0.75*OTERM*ORADIK/(ORADIK-RADIK) C C-- The minimal allowable value of FI was changed from 1E-15 to 1E-12, C-- because 1E-38 is the minimal allowable arg. for ALOG in our envir. C-- D. Bilitza, Nov 87. C -11 FI=0.5*ABS(FI)/SQRT(B0)+1E-12 +11 FI=0.5*ABS(FI)/SQRT(B0)+1E-12 C -C*****COMPUTE L FROM B AND I. SAME AS CARMEL IN INVAR. +C*****COMPUTE L FROM B AND I. SAME AS CARMEL IN INVAR. C C-- Correct dipole moment is used here. D. Bilitza, Nov 87. C @@ -362,44 +362,44 @@ C c arg = FI*FI*FI/DIMOB0 c if(abs(arg).gt.88.0) arg=88.0 XX=3*arg1-arg2 - IF(XX.GT.23.0) GOTO 776 - IF(XX.GT.11.7) GOTO 775 - IF(XX.GT.+3.0) GOTO 774 - IF(XX.GT.-3.0) GOTO 773 - IF(XX.GT.-22.) GOTO 772 - 771 GG=3.33338E-1*XX+3.0062102E-1 - GOTO777 - 772 GG=((((((((-8.1537735E-14*XX+8.3232531E-13)*XX+1.0066362E-9)*XX+ - & 8.1048663E-8)*XX+3.2916354E-6)*XX+8.2711096E-5)*XX+ + IF(XX.GT.23.0) GOTO 776 + IF(XX.GT.11.7) GOTO 775 + IF(XX.GT.+3.0) GOTO 774 + IF(XX.GT.-3.0) GOTO 773 + IF(XX.GT.-22.) GOTO 772 + 771 GG=3.33338E-1*XX+3.0062102E-1 + GOTO777 + 772 GG=((((((((-8.1537735E-14*XX+8.3232531E-13)*XX+1.0066362E-9)*XX+ + & 8.1048663E-8)*XX+3.2916354E-6)*XX+8.2711096E-5)*XX+ & 1.3714667E-3)*XX+1.5017245E-2)*XX+4.3432642E-1)*XX+ - & 6.2337691E-1 - GOTO777 - 773 GG=((((((((2.6047023E-10*XX+2.3028767E-9)*XX-2.1997983E-8)*XX- - & 5.3977642E-7)*XX-3.3408822E-6)*XX+3.8379917E-5)*XX+ + & 6.2337691E-1 + GOTO777 + 773 GG=((((((((2.6047023E-10*XX+2.3028767E-9)*XX-2.1997983E-8)*XX- + & 5.3977642E-7)*XX-3.3408822E-6)*XX+3.8379917E-5)*XX+ & 1.1784234E-3)*XX+1.4492441E-2)*XX+4.3352788E-1)*XX+ - & 6.228644E-1 - GOTO777 - 774 GG=((((((((6.3271665E-10*XX-3.958306E-8)*XX+9.9766148E-07)*XX- - & 1.2531932E-5)*XX+7.9451313E-5)*XX-3.2077032E-4)*XX+ + & 6.228644E-1 + GOTO777 + 774 GG=((((((((6.3271665E-10*XX-3.958306E-8)*XX+9.9766148E-07)*XX- + & 1.2531932E-5)*XX+7.9451313E-5)*XX-3.2077032E-4)*XX+ & 2.1680398E-3)*XX+1.2817956E-2)*XX+4.3510529E-1)*XX+ - & 6.222355E-1 - GOTO777 + & 6.222355E-1 + GOTO777 775 GG=(((((2.8212095E-8*XX-3.8049276E-6)*XX+2.170224E-4)*XX- & 6.7310339E-3)*XX+1.2038224E-1)*XX-1.8461796E-1)*XX+ - & 2.0007187E0 - GOTO777 - 776 GG=XX-3.0460681E0 + & 2.0007187E0 + GOTO777 + 776 GG=XX-3.0460681E0 777 FL=EXP(ALOG((1.+EXP(GG))*DIMOB0)/3.0) - RETURN -C*****APPROXIMATION FOR HIGH VALUES OF L. -30 ICODE=3 - T=-P(3,N-1)/STEP - FL=1./(ABS(((C3*T+C2)*T+C1)*T+C0)+1E-15) - RETURN - END + RETURN +C*****APPROXIMATION FOR HIGH VALUES OF L. +30 ICODE=3 + T=-P(3,N-1)/STEP + FL=1./(ABS(((C3*T+C2)*T+C1)*T+C0)+1E-15) + RETURN + END C C - SUBROUTINE STOER(P,BQ,R) + SUBROUTINE STOER(P,BQ,R) C******************************************************************* C* SUBROUTINE USED FOR FIELD LINE TRACING IN SHELLG * C* CALLS ENTRY POINT FELDI IN GEOMAGNETIC FIELD SUBROUTINE FELDG * @@ -408,55 +408,55 @@ C 09/07/22 NMAX=13 for DGRF00 and IGRF05; H/G-arrays(195) C******************************************************************* DIMENSION P(7),U(3,3) COMMON/IGRF2/ XI(3),H(196) -C*****XM,YM,ZM ARE GEOMAGNETIC CARTESIAN INVERSE CO-ORDINATES - ZM=P(3) +C*****XM,YM,ZM ARE GEOMAGNETIC CARTESIAN INVERSE CO-ORDINATES + ZM=P(3) FLI=P(1)*P(1)+P(2)*P(2)+1E-15 R=0.5*(FLI+SQRT(FLI*FLI+(ZM+ZM)**2)) RQ=R*R - WR=SQRT(R) - XM=P(1)*WR - YM=P(2)*WR -C*****TRANSFORM TO GEOGRAPHIC CO-ORDINATE SYSTEM - DATA U/ +0.3511737,-0.9148385,-0.1993679, - A +0.9335804,+0.3583680,+0.0000000, - B +0.0714471,-0.1861260,+0.9799247/ - XI(1)=XM*U(1,1)+YM*U(1,2)+ZM*U(1,3) - XI(2)=XM*U(2,1)+YM*U(2,2)+ZM*U(2,3) - XI(3)=XM*U(3,1) +ZM*U(3,3) -C*****COMPUTE DERIVATIVES -c CALL FELDI(XI,H) + WR=SQRT(R) + XM=P(1)*WR + YM=P(2)*WR +C*****TRANSFORM TO GEOGRAPHIC CO-ORDINATE SYSTEM + DATA U/ +0.3511737,-0.9148385,-0.1993679, + A +0.9335804,+0.3583680,+0.0000000, + B +0.0714471,-0.1861260,+0.9799247/ + XI(1)=XM*U(1,1)+YM*U(1,2)+ZM*U(1,3) + XI(2)=XM*U(2,1)+YM*U(2,2)+ZM*U(2,3) + XI(3)=XM*U(3,1) +ZM*U(3,3) +C*****COMPUTE DERIVATIVES +c CALL FELDI(XI,H) CALL FELDI - Q=H(1)/RQ - DX=H(3)+H(3)+Q*XI(1) - DY=H(4)+H(4)+Q*XI(2) - DZ=H(2)+H(2)+Q*XI(3) -C*****TRANSFORM BACK TO GEOMAGNETIC CO-ORDINATE SYSTEM - DXM=U(1,1)*DX+U(2,1)*DY+U(3,1)*DZ - DYM=U(1,2)*DX+U(2,2)*DY - DZM=U(1,3)*DX+U(2,3)*DY+U(3,3)*DZ - DR=(XM*DXM+YM*DYM+ZM*DZM)/R -C*****FORM SLOWLY VARYING EXPRESSIONS - P(4)=(WR*DXM-0.5*P(1)*DR)/(R*DZM) - P(5)=(WR*DYM-0.5*P(2)*DR)/(R*DZM) + Q=H(1)/RQ + DX=H(3)+H(3)+Q*XI(1) + DY=H(4)+H(4)+Q*XI(2) + DZ=H(2)+H(2)+Q*XI(3) +C*****TRANSFORM BACK TO GEOMAGNETIC CO-ORDINATE SYSTEM + DXM=U(1,1)*DX+U(2,1)*DY+U(3,1)*DZ + DYM=U(1,2)*DX+U(2,2)*DY + DZM=U(1,3)*DX+U(2,3)*DY+U(3,3)*DZ + DR=(XM*DXM+YM*DYM+ZM*DZM)/R +C*****FORM SLOWLY VARYING EXPRESSIONS + P(4)=(WR*DXM-0.5*P(1)*DR)/(R*DZM) + P(5)=(WR*DYM-0.5*P(2)*DR)/(R*DZM) DSQ=RQ*(DXM*DXM+DYM*DYM+DZM*DZM) BQ=DSQ*RQ*RQ - P(6)=SQRT(DSQ/(RQ+3.*ZM*ZM)) - P(7)=P(6)*(RQ+ZM*ZM)/(RQ*DZM) - RETURN - END + P(6)=SQRT(DSQ/(RQ+3.*ZM*ZM)) + P(7)=P(6)*(RQ+ZM*ZM)/(RQ*DZM) + RETURN + END C C - SUBROUTINE FELDG(GLAT,GLON,ALT,BNORTH,BEAST,BDOWN,BABS) -c----------------------------------------------------------------------- + SUBROUTINE FELDG(GLAT,GLON,ALT,BNORTH,BEAST,BDOWN,BABS) +c----------------------------------------------------------------------- C CALCULATES EARTH MAGNETIC FIELD FROM SPHERICAL HARMONICS MODEL -C REF: G. KLUGE, EUROPEAN SPACE OPERATIONS CENTRE, INTERNAL NOTE 61, +C REF: G. KLUGE, EUROPEAN SPACE OPERATIONS CENTRE, INTERNAL NOTE 61, C 1970. -c----------------------------------------------------------------------- +c----------------------------------------------------------------------- C CHANGES (D. BILITZA, NOV 87): C - FIELD COEFFICIENTS IN BINARY DATA FILES INSTEAD OF BLOCK DATA C - CALCULATES DIPOL MOMENT C 09/07/22 NMAX=13 for DGRF00 and IGRF05; H/G-arrays(195) -c----------------------------------------------------------------------- +c----------------------------------------------------------------------- C INPUT: ENTRY POINT FELDG C GLAT GEODETIC LATITUDE IN DEGREES (NORTH) C GLON GEODETIC LONGITUDE IN DEGREES (EAST) @@ -470,119 +470,119 @@ C Z-AXIS POINTING TO NORTH POLE C C COMMON BLANK AND ENTRY POINT FELDI ARE NEEDED WHEN USED C IN CONNECTION WITH L-CALCULATION PROGRAM SHELLG. -C +C C COMMON /MODEL/ AND /IGRF1/ C UMR = ATAN(1.0)*4./180. *UMR= -C ERA EARTH RADIUS FOR NORMALIZATION OF CARTESIAN +C ERA EARTH RADIUS FOR NORMALIZATION OF CARTESIAN C COORDINATES (6371.2 KM) -C AQUAD, BQUAD SQUARE OF MAJOR AND MINOR HALF AXIS OF -C EARTH ELLIPSOID AS RECOMMENDED BY INTERNAT. +C AQUAD, BQUAD SQUARE OF MAJOR AND MINOR HALF AXIS OF +C EARTH ELLIPSOID AS RECOMMENDED BY INTERNAT. C ASTRONOMICAL UNION (6378.160, 6356.775 KM). C NMAX MAXIMUM ORDER OF SPHERICAL HARMONICS -C TIME YEAR (DECIMAL: 1973.5) FOR WHICH MAGNETIC +C TIME YEAR (DECIMAL: 1973.5) FOR WHICH MAGNETIC C FIELD IS TO BE CALCULATED C G(M) NORMALIZED FIELD COEFFICIENTS (SEE FELDCOF) C M=NMAX*(NMAX+2) -c----------------------------------------------------------------------- +c----------------------------------------------------------------------- C OUTPUT: BABS MAGNETIC FIELD STRENGTH IN GAUSS C BNORTH, BEAST, BDOWN COMPONENTS OF THE FIELD WITH RESPECT C TO THE LOCAL GEODETIC COORDINATE SYSTEM, WITH AXIS C POINTING IN THE TANGENTIAL PLANE TO THE NORTH, EAST -C AND DOWNWARD. +C AND DOWNWARD. C----------------------------------------------------------------------- - DIMENSION V(3),B(3) + DIMENSION V(3),B(3) CHARACTER*13 NAME COMMON/IGRF2/XI(3),H(196) - COMMON/MODEL/NMAX,TIME,G(196),NAME + COMMON/MODEL/NMAX,TIME,G(196),NAME COMMON/IGRF1/ERA,AQUAD,BQUAD,DIMO /CONST/UMR,PI C C-- IS RECORDS ENTRY POINT C -C*****ENTRY POINT FELDG TO BE USED WITH GEODETIC CO-ORDINATES - IS=1 +C*****ENTRY POINT FELDG TO BE USED WITH GEODETIC CO-ORDINATES + IS=1 RLAT=GLAT*UMR - CT=SIN(RLAT) - ST=COS(RLAT) - D=SQRT(AQUAD-(AQUAD-BQUAD)*CT*CT) + CT=SIN(RLAT) + ST=COS(RLAT) + D=SQRT(AQUAD-(AQUAD-BQUAD)*CT*CT) RLON=GLON*UMR - CP=COS(RLON) - SP=SIN(RLON) + CP=COS(RLON) + SP=SIN(RLON) ZZZ=(ALT+BQUAD/D)*CT/ERA RHO=(ALT+AQUAD/D)*ST/ERA - XXX=RHO*CP - YYY=RHO*SP - GOTO 10 - -C*****ENTRY POINT FELDC TO BE USED WITH CARTESIAN CO-ORDINATES - ENTRY FELDC(V,B) - IS=2 - XXX=V(1) - YYY=V(2) - ZZZ=V(3) -10 RQ=1./(XXX*XXX+YYY*YYY+ZZZ*ZZZ) - XI(1)=XXX*RQ - XI(2)=YYY*RQ - XI(3)=ZZZ*RQ - GOTO 20 - -C*****ENTRY POINT FELDI USED FOR L COMPUTATION - ENTRY FELDI - IS=3 -20 IHMAX=NMAX*NMAX+1 - LAST=IHMAX+NMAX+NMAX - IMAX=NMAX+NMAX-1 - DO 8 I=IHMAX,LAST -8 H(I)=G(I) - DO 6 K=1,3,2 - I=IMAX - IH=IHMAX -1 IL=IH-I - F=2./FLOAT(I-K+2) - X=XI(1)*F - Y=XI(2)*F - Z=XI(3)*(F+F) - I=I-2 + XXX=RHO*CP + YYY=RHO*SP + GOTO 10 + +C*****ENTRY POINT FELDC TO BE USED WITH CARTESIAN CO-ORDINATES + ENTRY FELDC(V,B) + IS=2 + XXX=V(1) + YYY=V(2) + ZZZ=V(3) +10 RQ=1./(XXX*XXX+YYY*YYY+ZZZ*ZZZ) + XI(1)=XXX*RQ + XI(2)=YYY*RQ + XI(3)=ZZZ*RQ + GOTO 20 + +C*****ENTRY POINT FELDI USED FOR L COMPUTATION + ENTRY FELDI + IS=3 +20 IHMAX=NMAX*NMAX+1 + LAST=IHMAX+NMAX+NMAX + IMAX=NMAX+NMAX-1 + DO 8 I=IHMAX,LAST +8 H(I)=G(I) + DO 6 K=1,3,2 + I=IMAX + IH=IHMAX +1 IL=IH-I + F=2./FLOAT(I-K+2) + X=XI(1)*F + Y=XI(2)*F + Z=XI(3)*(F+F) + I=I-2 IF(I-1) 5,4,2 - -2 DO 3 M=3,I,2 - H(IL+M+1)=G(IL+M+1)+Z*H(IH+M+1)+X*(H(IH+M+3)- - A H(IH+M-1))-Y*(H(IH+M+2)+H(IH+M-2)) -3 H(IL+M)=G(IL+M)+Z*H(IH+M)+X*(H(IH+M+2)- + +2 DO 3 M=3,I,2 + H(IL+M+1)=G(IL+M+1)+Z*H(IH+M+1)+X*(H(IH+M+3)- + A H(IH+M-1))-Y*(H(IH+M+2)+H(IH+M-2)) +3 H(IL+M)=G(IL+M)+Z*H(IH+M)+X*(H(IH+M+2)- A H(IH+M-2))+Y*(H(IH+M+3)+H(IH+M-1)) - -4 H(IL+2)=G(IL+2)+Z*H(IH+2)+X*H(IH+4)-Y*(H(IH+3)+H(IH)) - H(IL+1)=G(IL+1)+Z*H(IH+1)+Y*H(IH+4)+X*(H(IH+3)-H(IH)) -5 H(IL)=G(IL)+Z*H(IH)+2.*(X*H(IH+1)+Y*H(IH+2)) - IH=IL - IF(I.GE.K) GOTO 1 + +4 H(IL+2)=G(IL+2)+Z*H(IH+2)+X*H(IH+4)-Y*(H(IH+3)+H(IH)) + H(IL+1)=G(IL+1)+Z*H(IH+1)+Y*H(IH+4)+X*(H(IH+3)-H(IH)) +5 H(IL)=G(IL)+Z*H(IH)+2.*(X*H(IH+1)+Y*H(IH+2)) + IH=IL + IF(I.GE.K) GOTO 1 6 CONTINUE - - IF(IS.EQ.3) RETURN - - S=.5*H(1)+2.*(H(2)*XI(3)+H(3)*XI(1)+H(4)*XI(2)) - T=(RQ+RQ)*SQRT(RQ) - BXXX=T*(H(3)-S*XXX) - BYYY=T*(H(4)-S*YYY) - BZZZ=T*(H(2)-S*ZZZ) - - IF(IS.EQ.2) GOTO 7 + + IF(IS.EQ.3) RETURN + + S=.5*H(1)+2.*(H(2)*XI(3)+H(3)*XI(1)+H(4)*XI(2)) + T=(RQ+RQ)*SQRT(RQ) + BXXX=T*(H(3)-S*XXX) + BYYY=T*(H(4)-S*YYY) + BZZZ=T*(H(2)-S*ZZZ) + + IF(IS.EQ.2) GOTO 7 BABS=SQRT(BXXX*BXXX+BYYY*BYYY+BZZZ*BZZZ) - BEAST=BYYY*CP-BXXX*SP - BRHO=BYYY*SP+BXXX*CP - BNORTH=BZZZ*ST-BRHO*CT - BDOWN=-BZZZ*CT-BRHO*ST - RETURN - -7 B(1)=BXXX - B(2)=BYYY - B(3)=BZZZ - RETURN - END + BEAST=BYYY*CP-BXXX*SP + BRHO=BYYY*SP+BXXX*CP + BNORTH=BZZZ*ST-BRHO*CT + BDOWN=-BZZZ*CT-BRHO*ST + RETURN + +7 B(1)=BXXX + B(2)=BYYY + B(3)=BZZZ + RETURN + END C C SUBROUTINE FELDCOF(YEAR) -c----------------------------------------------------------------------- +c----------------------------------------------------------------------- C DETERMINES COEFFICIENTS AND DIPOL MOMENT FROM IGRF MODELS C C INPUT: YEAR DECIMAL YEAR FOR WHICH GEOMAGNETIC FIELD IS TO @@ -591,36 +591,36 @@ C COMMON/IGRF1/ERAD,AQUAD,BQUAD,DIMO /CONST/UMR,PI C OUTPUT: COMMON/MODEL/NMAX,TIME,GH1,FIL1 C COMMON/DIPOL/GHI1,GHI2,GHI3 C -C THE GEOMAGNETIC DIPOL MOMENT (DIMO) IN GAUSS (NORMALIZED TO EARTH'S +C THE GEOMAGNETIC DIPOL MOMENT (DIMO) IN GAUSS (NORMALIZED TO EARTH'S C RADIUS) AT THE TIME (YEAR) IS COMPUTED BUT NOT USED. C -C 05/31/2000 updated to IGRF-2000 version (###) -C 03/24/2000 updated to IGRF-2005 version (###) +C 05/31/2000 updated to IGRF-2000 version (###) +C 03/24/2000 updated to IGRF-2005 version (###) C 07/22/2009 NMAX=13 for DGRF00 and IGRF05; H/G-arrays(195) -C 02/26/2010 update to IGRF-11 (2010) (###) +C 02/26/2010 update to IGRF-11 (2010) (###) C 10/05/2011 added COMMON/DIPOL/ for MLT computation in DPMTRX (IRIFUN) C 02/10/2015 update to IGRF-12 (2015) (###) C 03/05/2020 update to IGRF-13 (2020) (###) -c----------------------------------------------------------------------- - CHARACTER*13 FILMOD, FIL1, FIL2 +c----------------------------------------------------------------------- + CHARACTER*13 FILMOD, FIL1, FIL2 C ### FILMOD, DTEMOD array-size is number of IGRF maps DIMENSION GH1(196),GH2(196),GHA(196),FILMOD(17) DIMENSION DTEMOD(17) - DOUBLE PRECISION X,F0,F + DOUBLE PRECISION X,F0,F COMMON/MODEL/ NMAX,TIME,GH1,FIL1 COMMON/IGRF1/ ERAD,AQUAD,BQUAD,DIMO /CONST/UMR,PI COMMON/DIPOL/ GHI1,GHI2,GHI3 COMMON/path/ datapath - CHARACTER datapath*200 + CHARACTER datapath*200 C ### updated coefficient file names and corresponding years - DATA FILMOD / 'dgrf1945.dat','dgrf1950.dat','dgrf1955.dat', + DATA FILMOD / 'dgrf1945.dat','dgrf1950.dat','dgrf1955.dat', 1 'dgrf1960.dat','dgrf1965.dat','dgrf1970.dat','dgrf1975.dat', 2 'dgrf1980.dat','dgrf1985.dat','dgrf1990.dat','dgrf1995.dat', 3 'dgrf2000.dat','dgrf2005.dat','dgrf2010.dat','dgrf2015.dat', 4 'igrf2020.dat','igrf2020s.dat'/ - DATA DTEMOD / 1945., 1950., 1955., 1960., 1965., + DATA DTEMOD / 1945., 1950., 1955., 1960., 1965., 1 1970., 1975., 1980., 1985., 1990., 1995., 2000.,2005., - 2 2010., 2015., 2020., 2025./ + 2 2010., 2015., 2020., 2025./ C C ### numye is number of IGRF coefficient files minus 1 C @@ -636,26 +636,26 @@ C-- DETERMINE IGRF-YEARS FOR INPUT-YEAR IYEA = INT(YEAR/5.)*5 L = (IYEA - 1945)/5 + 1 IF(L.LT.1) L=1 - IF(L.GT.NUMYE) L=NUMYE - DTE1 = DTEMOD(L) - FIL1 = FILMOD(L) - DTE2 = DTEMOD(L+1) - FIL2 = FILMOD(L+1) + IF(L.GT.NUMYE) L=NUMYE + DTE1 = DTEMOD(L) + FIL1 = FILMOD(L) + DTE2 = DTEMOD(L+1) + FIL2 = FILMOD(L+1) C-- GET IGRF COEFFICIENTS FOR THE BOUNDARY YEARS CALL GETSHC (IU, TRIM(ADJUSTL(datapath))//FIL1, - & NMAX1, ERAD, GH1, IER) - IF (IER .NE. 0) STOP + & NMAX1, ERAD, GH1, IER) + IF (IER .NE. 0) STOP CALL GETSHC (IU, TRIM(ADJUSTL(datapath))//FIL2, - & NMAX2, ERAD, GH2, IER) + & NMAX2, ERAD, GH2, IER) IF (IER .NE. 0) STOP C-- DETERMINE IGRF COEFFICIENTS FOR YEAR - IF (L .LE. NUMYE-1) THEN - CALL INTERSHC (YEAR, DTE1, NMAX1, GH1, DTE2, - 1 NMAX2, GH2, NMAX, GHA) - ELSE - CALL EXTRASHC (YEAR, DTE1, NMAX1, GH1, NMAX2, - 1 GH2, NMAX, GHA) - ENDIF + IF (L .LE. NUMYE-1) THEN + CALL INTERSHC (YEAR, DTE1, NMAX1, GH1, DTE2, + 1 NMAX2, GH2, NMAX, GHA) + ELSE + CALL EXTRASHC (YEAR, DTE1, NMAX1, GH1, NMAX2, + 1 GH2, NMAX, GHA) + ENDIF C-- DETERMINE MAGNETIC DIPOL MOMENT AND COEFFIECIENTS G F0=0.D0 DO 1234 J=1,3 @@ -663,220 +663,220 @@ C-- DETERMINE MAGNETIC DIPOL MOMENT AND COEFFIECIENTS G F0 = F0 + F * F 1234 CONTINUE DIMO = DSQRT(F0) - GHI1=GHA(1) - GHI2=GHA(2) + GHI1=GHA(1) + GHI2=GHA(2) GHI3=GHA(3) GH1(1) = 0.0 - I=2 - F0=1.D-5 - IF(IS.EQ.0) F0=-F0 - SQRT2=SQRT(2.) + I=2 + F0=1.D-5 + IF(IS.EQ.0) F0=-F0 + SQRT2=SQRT(2.) - DO 9 N=1,NMAX + DO 9 N=1,NMAX X = N - F0 = F0 * X * X / (4.D0 * X - 2.D0) + F0 = F0 * X * X / (4.D0 * X - 2.D0) IF(IS.EQ.0) F0 = F0 * (2.D0 * X - 1.D0) / X - F = F0 * 0.5D0 + F = F0 * 0.5D0 IF(IS.EQ.0) F = F * SQRT2 GH1(I) = GHA(I-1) * F0 - I = I+1 - DO 9 M=1,N - F = F * (X + M) / (X - M + 1.D0) - IF(IS.EQ.0) F = F * DSQRT((X - M + 1.D0) / (X + M)) + I = I+1 + DO 9 M=1,N + F = F * (X + M) / (X - M + 1.D0) + IF(IS.EQ.0) F = F * DSQRT((X - M + 1.D0) / (X + M)) GH1(I) = GHA(I-1) * F GH1(I+1) = GHA(I) * F I=I+2 -9 CONTINUE +9 CONTINUE RETURN END C C - SUBROUTINE GETSHC (IU, FSPEC, NMAX, ERAD, GH, IER) -C =============================================================== -C Reads spherical harmonic coefficients from the specified -C file into an array. -C Input: -C IU - Logical unit number -C FSPEC - File specification -C Output: -C NMAX - Maximum degree and order of model -C ERAD - Earth's radius associated with the spherical -C harmonic coefficients, in the same units as -C elevation -C GH - Schmidt quasi-normal internal spherical -C harmonic coefficients -C IER - Error number: = 0, no error -C = -2, records out of order -C = FORTRAN run-time error number -C =============================================================== - - CHARACTER FSPEC*(*), FOUT*213 + SUBROUTINE GETSHC (IU, FSPEC, NMAX, ERAD, GH, IER) +C =============================================================== +C Reads spherical harmonic coefficients from the specified +C file into an array. +C Input: +C IU - Logical unit number +C FSPEC - File specification +C Output: +C NMAX - Maximum degree and order of model +C ERAD - Earth's radius associated with the spherical +C harmonic coefficients, in the same units as +C elevation +C GH - Schmidt quasi-normal internal spherical +C harmonic coefficients +C IER - Error number: = 0, no error +C = -2, records out of order +C = FORTRAN run-time error number +C =============================================================== + + CHARACTER FSPEC*(*), FOUT*213 DIMENSION GH(196) - LOGICAL mess - COMMON/iounit/konsol,mess - do 1 j=1,196 + LOGICAL mess + COMMON/iounit/konsol,mess + do 1 j=1,196 1 GH(j)=0.0 -C --------------------------------------------------------------- -C Open coefficient file. Read past first header record. -C Read degree and order of model and Earth's radius. -C --------------------------------------------------------------- +C --------------------------------------------------------------- +C Open coefficient file. Read past first header record. +C Read degree and order of model and Earth's radius. +C --------------------------------------------------------------- WRITE(FOUT,667) FSPEC 667 FORMAT(A213) c-web-for webversion c 667 FORMAT('/var/www/omniweb/cgi/vitmo/IRI/',A13) OPEN (IU, FILE=TRIM(ADJUSTL(FOUT)), STATUS='OLD', IOSTAT=IER, - & ERR=999) - READ (IU, *, IOSTAT=IER, ERR=999) - READ (IU, *, IOSTAT=IER, ERR=999) NMAX, ERAD, XMYEAR - nm=nmax*(nmax+2) - READ (IU, *, IOSTAT=IER, ERR=999) (GH(i),i=1,nm) - goto 888 - + & ERR=999) + READ (IU, *, IOSTAT=IER, ERR=999) + READ (IU, *, IOSTAT=IER, ERR=999) NMAX, ERAD, XMYEAR + nm=nmax*(nmax+2) + READ (IU, *, IOSTAT=IER, ERR=999) (GH(i),i=1,nm) + goto 888 + 999 if (mess) write(konsol,100) FOUT 100 FORMAT('Error while reading ',A13) -888 CLOSE (IU) - RETURN - END -C -C - SUBROUTINE INTERSHC (DATE, DTE1, NMAX1, GH1, DTE2, - 1 NMAX2, GH2, NMAX, GH) - -C =============================================================== -C -C Version 1.01 -C -C Interpolates linearly, in time, between two spherical -C harmonic models. -C -C Input: -C DATE - Date of resulting model (in decimal year) -C DTE1 - Date of earlier model -C NMAX1 - Maximum degree and order of earlier model -C GH1 - Schmidt quasi-normal internal spherical -C harmonic coefficients of earlier model -C DTE2 - Date of later model -C NMAX2 - Maximum degree and order of later model -C GH2 - Schmidt quasi-normal internal spherical -C harmonic coefficients of later model -C -C Output: -C GH - Coefficients of resulting model -C NMAX - Maximum degree and order of resulting model -C -C A. Zunde -C USGS, MS 964, Box 25046 Federal Center, Denver, CO 80225 -C -C =============================================================== - - DIMENSION GH1(*), GH2(*), GH(*) - -C --------------------------------------------------------------- -C The coefficients (GH) of the resulting model, at date -C DATE, are computed by linearly interpolating between the -C coefficients of the earlier model (GH1), at date DTE1, -C and those of the later model (GH2), at date DTE2. If one -C model is smaller than the other, the interpolation is -C performed with the missing coefficients assumed to be 0. -C --------------------------------------------------------------- - - FACTOR = (DATE - DTE1) / (DTE2 - DTE1) - - IF (NMAX1 .EQ. NMAX2) THEN - K = NMAX1 * (NMAX1 + 2) - NMAX = NMAX1 - ELSE IF (NMAX1 .GT. NMAX2) THEN - K = NMAX2 * (NMAX2 + 2) - L = NMAX1 * (NMAX1 + 2) - DO 1122 I = K + 1, L -1122 GH(I) = GH1(I) + FACTOR * (-GH1(I)) - NMAX = NMAX1 - ELSE - K = NMAX1 * (NMAX1 + 2) - L = NMAX2 * (NMAX2 + 2) - DO 1133 I = K + 1, L -1133 GH(I) = FACTOR * GH2(I) - NMAX = NMAX2 - ENDIF - - DO 1144 I = 1, K -1144 GH(I) = GH1(I) + FACTOR * (GH2(I) - GH1(I)) - - RETURN - END -C -C - SUBROUTINE EXTRASHC (DATE, DTE1, NMAX1, GH1, NMAX2, - 1 GH2, NMAX, GH) -C =============================================================== C -C Version 1.01 C -C Extrapolates linearly a spherical harmonic model with a -C rate-of-change model. -C -C Input: -C DATE - Date of resulting model (in decimal year) -C DTE1 - Date of base model -C NMAX1 - Maximum degree and order of base model -C GH1 - Schmidt quasi-normal internal spherical -C harmonic coefficients of base model -C NMAX2 - Maximum degree and order of rate-of-change -C model -C GH2 - Schmidt quasi-normal internal spherical -C harmonic coefficients of rate-of-change model -C -C Output: -C GH - Coefficients of resulting model -C NMAX - Maximum degree and order of resulting model -C -C A. Zunde -C USGS, MS 964, Box 25046 Federal Center, Denver, CO 80225 -C -C =============================================================== - - DIMENSION GH1(*), GH2(*), GH(*) - -C --------------------------------------------------------------- -C The coefficients (GH) of the resulting model, at date -C DATE, are computed by linearly extrapolating the coef- -C ficients of the base model (GH1), at date DTE1, using -C those of the rate-of-change model (GH2), at date DTE2. If -C one model is smaller than the other, the extrapolation is -C performed with the missing coefficients assumed to be 0. -C --------------------------------------------------------------- - - FACTOR = (DATE - DTE1) - - IF (NMAX1 .EQ. NMAX2) THEN - K = NMAX1 * (NMAX1 + 2) - NMAX = NMAX1 - ELSE IF (NMAX1 .GT. NMAX2) THEN - K = NMAX2 * (NMAX2 + 2) - L = NMAX1 * (NMAX1 + 2) - DO 1155 I = K + 1, L -1155 GH(I) = GH1(I) - NMAX = NMAX1 - ELSE - K = NMAX1 * (NMAX1 + 2) - L = NMAX2 * (NMAX2 + 2) - DO 1166 I = K + 1, L -1166 GH(I) = FACTOR * GH2(I) - NMAX = NMAX2 - ENDIF - - DO 1177 I = 1, K -1177 GH(I) = GH1(I) + FACTOR * GH2(I) - - RETURN - END +888 CLOSE (IU) + RETURN + END +C +C + SUBROUTINE INTERSHC (DATE, DTE1, NMAX1, GH1, DTE2, + 1 NMAX2, GH2, NMAX, GH) + +C =============================================================== +C +C Version 1.01 +C +C Interpolates linearly, in time, between two spherical +C harmonic models. +C +C Input: +C DATE - Date of resulting model (in decimal year) +C DTE1 - Date of earlier model +C NMAX1 - Maximum degree and order of earlier model +C GH1 - Schmidt quasi-normal internal spherical +C harmonic coefficients of earlier model +C DTE2 - Date of later model +C NMAX2 - Maximum degree and order of later model +C GH2 - Schmidt quasi-normal internal spherical +C harmonic coefficients of later model +C +C Output: +C GH - Coefficients of resulting model +C NMAX - Maximum degree and order of resulting model +C +C A. Zunde +C USGS, MS 964, Box 25046 Federal Center, Denver, CO 80225 +C +C =============================================================== + + DIMENSION GH1(*), GH2(*), GH(*) + +C --------------------------------------------------------------- +C The coefficients (GH) of the resulting model, at date +C DATE, are computed by linearly interpolating between the +C coefficients of the earlier model (GH1), at date DTE1, +C and those of the later model (GH2), at date DTE2. If one +C model is smaller than the other, the interpolation is +C performed with the missing coefficients assumed to be 0. +C --------------------------------------------------------------- + + FACTOR = (DATE - DTE1) / (DTE2 - DTE1) + + IF (NMAX1 .EQ. NMAX2) THEN + K = NMAX1 * (NMAX1 + 2) + NMAX = NMAX1 + ELSE IF (NMAX1 .GT. NMAX2) THEN + K = NMAX2 * (NMAX2 + 2) + L = NMAX1 * (NMAX1 + 2) + DO 1122 I = K + 1, L +1122 GH(I) = GH1(I) + FACTOR * (-GH1(I)) + NMAX = NMAX1 + ELSE + K = NMAX1 * (NMAX1 + 2) + L = NMAX2 * (NMAX2 + 2) + DO 1133 I = K + 1, L +1133 GH(I) = FACTOR * GH2(I) + NMAX = NMAX2 + ENDIF + + DO 1144 I = 1, K +1144 GH(I) = GH1(I) + FACTOR * (GH2(I) - GH1(I)) + + RETURN + END +C +C + SUBROUTINE EXTRASHC (DATE, DTE1, NMAX1, GH1, NMAX2, + 1 GH2, NMAX, GH) +C =============================================================== C +C Version 1.01 C +C Extrapolates linearly a spherical harmonic model with a +C rate-of-change model. +C +C Input: +C DATE - Date of resulting model (in decimal year) +C DTE1 - Date of base model +C NMAX1 - Maximum degree and order of base model +C GH1 - Schmidt quasi-normal internal spherical +C harmonic coefficients of base model +C NMAX2 - Maximum degree and order of rate-of-change +C model +C GH2 - Schmidt quasi-normal internal spherical +C harmonic coefficients of rate-of-change model +C +C Output: +C GH - Coefficients of resulting model +C NMAX - Maximum degree and order of resulting model +C +C A. Zunde +C USGS, MS 964, Box 25046 Federal Center, Denver, CO 80225 +C +C =============================================================== + + DIMENSION GH1(*), GH2(*), GH(*) + +C --------------------------------------------------------------- +C The coefficients (GH) of the resulting model, at date +C DATE, are computed by linearly extrapolating the coef- +C ficients of the base model (GH1), at date DTE1, using +C those of the rate-of-change model (GH2), at date DTE2. If +C one model is smaller than the other, the extrapolation is +C performed with the missing coefficients assumed to be 0. +C --------------------------------------------------------------- + + FACTOR = (DATE - DTE1) + + IF (NMAX1 .EQ. NMAX2) THEN + K = NMAX1 * (NMAX1 + 2) + NMAX = NMAX1 + ELSE IF (NMAX1 .GT. NMAX2) THEN + K = NMAX2 * (NMAX2 + 2) + L = NMAX1 * (NMAX1 + 2) + DO 1155 I = K + 1, L +1155 GH(I) = GH1(I) + NMAX = NMAX1 + ELSE + K = NMAX1 * (NMAX1 + 2) + L = NMAX2 * (NMAX2 + 2) + DO 1166 I = K + 1, L +1166 GH(I) = FACTOR * GH2(I) + NMAX = NMAX2 + ENDIF + + DO 1177 I = 1, K +1177 GH(I) = GH1(I) + FACTOR * GH2(I) + + RETURN + END C C SUBROUTINE GEODIP(IYR,SLA,SLO,DLA,DLO,J) -C =============================================================== -C Calculates geomagnetic dipole latitude/longitude (DLA/DLO) from -C geocentric latitude/longitude (SLA/SLO) for J=0 and vice versa +C =============================================================== +C Calculates geomagnetic dipole latitude/longitude (DLA/DLO) from +C geocentric latitude/longitude (SLA/SLO) for J=0 and vice versa C for J=1. C J=0 J=1 C INPUT: J,SLA,SLO J,DLA,DLO @@ -884,10 +884,10 @@ C OUTPUT: DLA,DLO SLA,SLO C Last revision: November 2005 (Vladimir Papitashvili) C The code is modifed from GEOCOR written by V.Popov and V.Papitashvili -C in mid-1980s. -C =============================================================== +C in mid-1980s. +C =============================================================== - COMMON /CONST/UMR,PI + COMMON /CONST/UMR,PI C Earth's radius (km) RE = 6371.2 @@ -896,7 +896,7 @@ C RH = (RE + HI)/RE R = 1. if(j.gt.0) goto 1234 - + COL = (90.- SLA)*UMR RLO = SLO*UMR CALL SPHCAR(R,COL,RLO,X,Y,Z,1) @@ -907,7 +907,7 @@ C RH = (RE + HI)/RE DCO = TH/UMR DLA = 90.- DCO RETURN - + 1234 continue COL = (90.- DLA)*UMR RLO = DLO*UMR @@ -922,12 +922,12 @@ C RH = (RE + HI)/RE RETURN END -C -C +C +C function fmodip(xlat) - + common/findRLAT/xlong,year - + call igrf_dip(xlat,xlong,year,300.,dec,dip,dipl,ymodip) fmodip=ymodip @@ -942,7 +942,7 @@ C (CGM) latitude/longitude using IGRF model. C C Version 2011 for GEO-CGM.FOR (good through 2015) January 2011 C Version 2005 for GEO-CGM.FOR (good through 2010) November 2005 -C Nov 11, 2005 IGRF and RECALC are is modified to the IGRF-10 model +C Nov 11, 2005 IGRF and RECALC are is modified to the IGRF-10 model C and extended back to 1900 using the DGRF coeffcients C Apr 11, 2001 GEOLOW is modified to account for interpolation of C CGM meridians near equator across the 360/0 boundary @@ -952,7 +952,7 @@ C NASA/Goddard Space Flight Center, Greenbelt, Maryland) C Vladimir O. Papitashvili (IZMIRAN, Moscow, Russia, now at SPRL, C University of Michigan, Ann Arbor) C Conributions from Boris A. Belov and Vladimir A. Popov (both at -C IZMIRAN), Therese Moretto (DMI, DSRI, now at NSF), Freddy +C IZMIRAN), Therese Moretto (DMI, DSRI, now at NSF), Freddy C Christiansen (DMI, DSRI), and Scott Boardsen (NASA/GSFC). C The original version of this code is described in the brochure by @@ -1403,12 +1403,12 @@ C ********************************************************************** PARAMETER (CON=1.4,CON2=CON*CON,BIG=1.E30,NTAB=10,SAFE=2.) EXTERNAL func - COMMON/iounit/konsol,mess + COMMON/iounit/konsol,mess INTEGER i,j REAL errt,fac,hh,a(NTAB,NTAB) if(h.eq.0.) then - if (mess) write(konsol,100) + if (mess) write(konsol,100) 100 FORMAT('h must be nonzero in dfridr') return endif @@ -2424,9 +2424,9 @@ C ********************************************************************* * H1990(66),H1995(66),H2000(66),H2005(66),H2010(66),H2015(66) logical mess - + common /iounit/konsol,mess - + DATA G1900/ * 0., -31543., -2298., -677., 2905., 924., 1022., * -1469., 1256., 572., 876., 628., 660., -361., @@ -2988,7 +2988,7 @@ C ********************************************************************* * 3.1, -12.4, -0.8, 8.4, -8.4, -10.1, -1.9, * -6.2, 0.9, -1.1, -0.2, 2.5, -0.3, 2.1, * 3.1, -1.0, -2.8/ - + DATA H2010/ * 0.0, 0.0, 4944.3, 0.0, -2708.5, -575.7, 0.0, @@ -3014,7 +3014,7 @@ C ********************************************************************* * 0.7, -13.3, -0.1, 8.7, -9.1, -10.5, -1.9, * -6.3, 0.1, 0.5, -0.5, 1.8, -0.7, 2.1, * 2.4, -1.8, -3.6/ - + DATA H2015/ * 0.0, 0.0, 4797.1, 0.0, -2845.6, -641.9, 0.0, @@ -3106,7 +3106,7 @@ C 40 CONTINUE GOTO 300 -C INTERPOLATE BETWEEN YEARS +C INTERPOLATE BETWEEN YEARS C INTERPOLATE BETWEEN 1900 - 1905: 1900 F2=(IYR-1900)/5. @@ -3116,7 +3116,7 @@ C INTERPOLATE BETWEEN 1900 - 1905: H(N)=H1900(N)*F1+H1905(N)*F2 ENDDO GOTO 300 - + C INTERPOLATE BETWEEN 1905 - 1910: 1905 F2=(IYR-1905)/5. F1=1.-F2 @@ -3125,7 +3125,7 @@ C INTERPOLATE BETWEEN 1905 - 1910: H(N)=H1905(N)*F1+H1910(N)*F2 ENDDO GOTO 300 - + C INTERPOLATE BETWEEN 1910 - 1915: 1910 F2=(IYR-1910)/5. F1=1.-F2 @@ -3134,7 +3134,7 @@ C INTERPOLATE BETWEEN 1910 - 1915: H(N)=H1910(N)*F1+H1915(N)*F2 ENDDO GOTO 300 - + C INTERPOLATE BETWEEN 1915 - 1920: 1915 F2=(IYR-1915)/5. F1=1.-F2 @@ -3143,7 +3143,7 @@ C INTERPOLATE BETWEEN 1915 - 1920: H(N)=H1915(N)*F1+H1920(N)*F2 ENDDO GOTO 300 - + C INTERPOLATE BETWEEN 1920 - 1925: 1920 F2=(IYR-1920)/5. F1=1.-F2 @@ -3152,7 +3152,7 @@ C INTERPOLATE BETWEEN 1920 - 1925: H(N)=H1920(N)*F1+H1925(N)*F2 ENDDO GOTO 300 - + C INTERPOLATE BETWEEN 1925 - 1930: 1925 F2=(IYR-1925)/5. F1=1.-F2 @@ -3161,7 +3161,7 @@ C INTERPOLATE BETWEEN 1925 - 1930: H(N)=H1925(N)*F1+H1930(N)*F2 ENDDO GOTO 300 - + C INTERPOLATE BETWEEN 1930 - 1935: 1930 F2=(IYR-1930)/5. F1=1.-F2 @@ -3170,7 +3170,7 @@ C INTERPOLATE BETWEEN 1930 - 1935: H(N)=H1930(N)*F1+H1935(N)*F2 ENDDO GOTO 300 - + C INTERPOLATE BETWEEN 1935 - 1940: 1935 F2=(IYR-1935)/5. F1=1.-F2 @@ -3179,7 +3179,7 @@ C INTERPOLATE BETWEEN 1935 - 1940: H(N)=H1935(N)*F1+H1940(N)*F2 ENDDO GOTO 300 - + C INTERPOLATE BETWEEN 1940 - 1945: 1940 F2=(IYR-1940)/5. F1=1.-F2 @@ -3188,7 +3188,7 @@ C INTERPOLATE BETWEEN 1940 - 1945: H(N)=H1940(N)*F1+H1945(N)*F2 ENDDO GOTO 300 - + C INTERPOLATE BETWEEN 1945 - 1950: 1945 F2=(IYR-1945)/5. F1=1.-F2 @@ -3197,7 +3197,7 @@ C INTERPOLATE BETWEEN 1945 - 1950: H(N)=H1945(N)*F1+H1950(N)*F2 ENDDO GOTO 300 - + C INTERPOLATE BETWEEN 1950 - 1955: 1950 F2=(IYR-1950)/5. F1=1.-F2 @@ -3206,7 +3206,7 @@ C INTERPOLATE BETWEEN 1950 - 1955: H(N)=H1950(N)*F1+H1955(N)*F2 ENDDO GOTO 300 - + C INTERPOLATE BETWEEN 1955 - 1960: 1955 F2=(IYR-1955)/5. F1=1.-F2 @@ -3215,7 +3215,7 @@ C INTERPOLATE BETWEEN 1955 - 1960: H(N)=H1955(N)*F1+H1960(N)*F2 ENDDO GOTO 300 - + C INTERPOLATE BETWEEN 1960 - 1965: 1960 F2=(IYR-1960)/5. F1=1.-F2 @@ -3224,7 +3224,7 @@ C INTERPOLATE BETWEEN 1960 - 1965: H(N)=H1960(N)*F1+H1965(N)*F2 ENDDO GOTO 300 - + C INTERPOLATE BETWEEN 1965 - 1970: 1965 F2=(IYR-1965)/5. F1=1.-F2 @@ -3233,7 +3233,7 @@ C INTERPOLATE BETWEEN 1965 - 1970: H(N)=H1965(N)*F1+H1970(N)*F2 ENDDO GOTO 300 - + C INTERPOLATE BETWEEN 1970 - 1975: 1970 F2=(IYR-1970)/5. F1=1.-F2 @@ -3242,7 +3242,7 @@ C INTERPOLATE BETWEEN 1970 - 1975: H(N)=H1970(N)*F1+H1975(N)*F2 ENDDO GOTO 300 - + C INTERPOLATE BETWEEN 1975 - 1980: 1975 F2=(IYR-1975)/5. F1=1.-F2 @@ -3251,7 +3251,7 @@ C INTERPOLATE BETWEEN 1975 - 1980: H(N)=H1975(N)*F1+H1980(N)*F2 ENDDO GOTO 300 - + C INTERPOLATE BETWEEN 1980 - 1985: 1980 F2=(IYR-1980)/5. F1=1.-F2 @@ -3260,7 +3260,7 @@ C INTERPOLATE BETWEEN 1980 - 1985: H(N)=H1980(N)*F1+H1985(N)*F2 ENDDO GOTO 300 - + C INTERPOLATE BETWEEN 1985 - 1990: 1985 F2=(IYR-1985)/5. F1=1.-F2 @@ -3269,7 +3269,7 @@ C INTERPOLATE BETWEEN 1985 - 1990: H(N)=H1985(N)*F1+H1990(N)*F2 ENDDO GOTO 300 - + C INTERPOLATE BETWEEN 1990 - 1995: 1990 F2=(IYR-1990)/5. F1=1.-F2 @@ -3278,7 +3278,7 @@ C INTERPOLATE BETWEEN 1990 - 1995: H(N)=H1990(N)*F1+H1995(N)*F2 ENDDO GOTO 300 - + C INTERPOLATE BETWEEN 1995 - 2000: 1995 F2=(IYR-1995)/5. F1=1.-F2 @@ -3287,7 +3287,7 @@ C INTERPOLATE BETWEEN 1995 - 2000: H(N)=H1995(N)*F1+H2000(N)*F2 ENDDO GOTO 300 - + C INTERPOLATE BETWEEN 2000 - 2005: 2000 F2=(IYR-2000)/5. F1=1.-F2 @@ -3439,7 +3439,7 @@ C from 1945 (updated by V. Papitashvili, February 1995) C C Modified to accept years up to 2005 (V. Papitashvili, January 2001) C -C Modified to accept years from 1900 through 2010 using the DGRF & +C Modified to accept years from 1900 through 2010 using the DGRF & C IGRF-10 coeficients (updated by V. Papitashvili, November 2005) C C Modified to accept years up to 2015 (V. Papitashvili, January 2011) @@ -3470,8 +3470,8 @@ C ********************************************************************* COMMON/C1/ ST0,CT0,SL0,CL0,CTCL,STCL,CTSL,STSL,SFI,CFI,SPS,CPS, * SHI,CHI,HI,PSI,XMUT,A11,A21,A31,A12,A22,A32,A13,A23,A33,DS3, * K,IY,BA - - common/iounit/konsol,mess + + common/iounit/konsol,mess DATA IYE,IDE/2*0/ IF (IYR.EQ.IYE.AND.IDAY.EQ.IDE) GOTO 5 @@ -3798,8 +3798,8 @@ C AND THEREFORE: C C SUBROUTINE SPHCAR(R,TETA,PHI,X,Y,Z,J) -C =============================================================== -C CONVERTS GEOCENTRIC CARTESIAN COORDINATES OF a LOCATION INTO +C =============================================================== +C CONVERTS GEOCENTRIC CARTESIAN COORDINATES OF a LOCATION INTO C THE TOPOCENTRIC COORDINATES (TETA, PHI, R) At that LOCATION C FOR J<0 AND VICA VERSA FOR J>0 (TETA AND PHI IN RADIANS). C J>0 J<0 @@ -3808,7 +3808,7 @@ C----OUTPUT: X,Y,Z R,TETA,PHI C AUTHOR: NIKOLAI A. TSYGANENKO, INSTITUTE OF PHYSICS, ST.- C PETERSBURG STATE UNIVERSITY, STARY PETERGOF 198904, ST.- C PETERSBURG, RUSSIA. -C =============================================================== +C =============================================================== IMPLICIT NONE @@ -3868,8 +3868,8 @@ C ********************************************************************* C C SUBROUTINE GEOMAG(XGEO,YGEO,ZGEO,XMAG,YMAG,ZMAG,J,IYR) -C =============================================================== -C CONVERTS GEOCENTRIC CARTESIAN COORDINATES (XGEO,YGEO,ZGEO) TO +C =============================================================== +C CONVERTS GEOCENTRIC CARTESIAN COORDINATES (XGEO,YGEO,ZGEO) TO C MAGNETIC DIPOLE CARTESIAN COORDINATES (XMAG,YMAG,ZMAG) FOR J>0 C OR VICA VERSA FOR J<0. IYR IS YEAR NUMBER (FOUR DIGITS). C @@ -3880,7 +3880,7 @@ C C AUTHOR: NIKOLAI A. TSYGANENKO, INSTITUTE OF PHYSICS, ST.- C PETERSBURG STATE UNIVERSITY, STARY PETERGOF 198904, ST.-PETERS- C BURG, RUSSIA. -C =============================================================== +C =============================================================== IMPLICIT NONE @@ -3998,19 +3998,19 @@ C-------------------------------------------------------------------- INTEGER IHOUR,MIN,ISEC REAL GST,SLONG,SRASN,SDEC REAL BE,CAL,SA(3),S,C,SG(3),SM(3) - REAL LAM,LAMS,DELLAM + REAL LAM,LAMS,DELLAM COMMON /CONST/DTOR,PI - + XG=COS(GLAT*DTOR)*COS(GLON*DTOR) YG=COS(GLAT*DTOR)*SIN(GLON*DTOR) ZG=SIN(GLAT*DTOR) CALL DPMTRX(IYYYY,DDD,XXM,YYM,ZZM) - + C transform XM=XXM(1)*XG+XXM(2)*YG+XXM(3)*ZG YM=YYM(1)*XG+YYM(2)*YG+YYM(3)*ZG ZM=ZZM(1)*XG+ZZM(2)*YG+ZZM(3)*ZG -C +C IHOUR=INT(UTHR) MIN=INT((UTHR-IHOUR)*60) ISEC=INT((UTHR-IHOUR-MIN/60.0)*3600) @@ -4025,12 +4025,12 @@ C C=COS(BE) SG(1)=C*SA(1)+S*SA(2) SG(2)=C*SA(2)-S*SA(1) - SG(3)=SA(3) + SG(3)=SA(3) C transform SM(1)=XXM(1)*SG(1)+XXM(2)*SG(2)+XXM(3)*SG(3) SM(2)=YYM(1)*SG(1)+YYM(2)*SG(2)+YYM(3)*SG(3) SM(3)=ZZM(1)*SG(1)+ZZM(2)*SG(2)+ZZM(3)*SG(3) -C +C LAM=ATAN2(YM,XM) LAMS=ATAN2(SM(2),SM(1)) DELLAM=LAM-LAMS @@ -4042,7 +4042,7 @@ C C SUBROUTINE DPMTRX(IYYYY,DDD,XM,YM,ZM) C-------------------------------------------------------------------------- -C calculates othonormal matrix (columns XM,YM,ZM) for transformation +C calculates othonormal matrix (columns XM,YM,ZM) for transformation C from geographic to magnetic coordinates C Inputs: C IYYYY..year @@ -4050,7 +4050,7 @@ C DDD..day of year (1.1 = 0) C Outputs: C XM,YM,ZM..colums of the matrix C Notes: -C MX(N),MY(N),MZ(N)..coordinates of the B vector in geographic system +C MX(N),MY(N),MZ(N)..coordinates of the B vector in geographic system C for years stored in YR(N) C N..number of elements of arrays MX,MY,MZ and YR C-------------------------------------------------------------------------- diff --git a/RMextract/pyiri/igrf2020.dat b/RMextract/pyiri/igrf2020.dat index 9314b32..8829730 100644 --- a/RMextract/pyiri/igrf2020.dat +++ b/RMextract/pyiri/igrf2020.dat @@ -1,4 +1,4 @@ - igrf2020 + igrf2020 13 6371.2 2015.0 -29404.8 -1450.9 diff --git a/RMextract/pyiri/igrf2020s.dat b/RMextract/pyiri/igrf2020s.dat index 2c10302..0da086e 100644 --- a/RMextract/pyiri/igrf2020s.dat +++ b/RMextract/pyiri/igrf2020s.dat @@ -1,4 +1,4 @@ - igrf2020s + igrf2020s 8 6371.2 2020.0 5.7 7.4 diff --git a/RMextract/pyiri/iri.pyf b/RMextract/pyiri/iri.pyf index a3cc7a2..9911dc1 100644 --- a/RMextract/pyiri/iri.pyf +++ b/RMextract/pyiri/iri.pyf @@ -1,7 +1,7 @@ ! -*- f90 -*- ! Note: the context of this file is case sensitive. -python module _iri ! in +python module _iri ! in interface ! in :_iri subroutine iri_get_sub(path,jf,jmag,alati,along,iyyyy,mmdd,dhour,heibeg,heiend,heistp,outf,oarr) ! in :_iri:iriget.for character*200 :: path @@ -33,7 +33,7 @@ python module _iri ! in real intent(out) :: tecb real intent(out) :: tect end subroutine iri_get_tec - end interface + end interface end python module _iri ! This file was auto-generated with f2py (version:2). diff --git a/RMextract/pyiri/iridreg.for b/RMextract/pyiri/iridreg.for index 02e4786..708929b 100644 --- a/RMextract/pyiri/iridreg.for +++ b/RMextract/pyiri/iridreg.for @@ -5,11 +5,11 @@ C This file contains the D-region models of Friedrich and Torkar (2001) C (subroutine F00 and block data statement). C The subroutine DRegion of Danilov et al. (1995) was moved to IRIFUN, C because of consistent problems of some Fortran compilers wit the long -C BLOCK DATA statement. +C BLOCK DATA statement. C -C !!!USER NOTE!!! If your compiler has problems with this subroutine you -C can compile IRI without this file. But you first have to comment out -C the following two line in IRISUB: +C !!!USER NOTE!!! If your compiler has problems with this subroutine you +C can compile IRI without this file. But you first have to comment out +C the following two line in IRISUB: C call F00(HEIGHT,LATI,DAYNR,XHI,F107D,EDENS,IERROR) C if(ierror.eq.0.or.ierror.eq.2) outf(1,kk)=edens c diff --git a/RMextract/pyiri/iriflip.for b/RMextract/pyiri/iriflip.for index 7b097fd..e32e33e 100644 --- a/RMextract/pyiri/iriflip.for +++ b/RMextract/pyiri/iriflip.for @@ -1,9 +1,9 @@ -C IRIFLIP.for +C IRIFLIP.for C C 2012.00 10/05/11 IRI-2012: bottomside B0 B1 model (SHAMDB0D, SHAB1D), C 2012.00 10/05/11 bottomside Ni model (iriflip.for), auroral foE C 2012.00 10/05/11 storm model (storme_ap), Te with PF10.7 (elteik), -C 2012.00 10/05/11 oval kp model (auroral_boundary), IGRF-11(igrf.for), +C 2012.00 10/05/11 oval kp model (auroral_boundary), IGRF-11(igrf.for), C 2012.00 10/05/11 NRLMSIS00 (cira.for), CGM coordinates, F10.7 daily C 2012.00 10/05/11 81-day 365-day indices (apf107.dat), ap->kp (ckp), C 2012.00 10/05/11 array size change jf(50) outf(20,1000), oarr(100). @@ -21,17 +21,17 @@ C C includes: main subroutine CHEMION and the following subroutines and functions C KEMPPRN.FOR: CN2D, CNO, CN4S, CN2PLS, CNOP, CO2P, COP4S, COP2D, COP2P, C CNPLS, CN2A, CN2P, CNOPV -C RATES.FOR: RATS -C PESIMP.FOR: SECIPRD, FLXCAL, FACFLX, SIGEXS, TXSION, OXRAT, T_XS_N2, +C RATES.FOR: RATS +C PESIMP.FOR: SECIPRD, FLXCAL, FACFLX, SIGEXS, TXSION, OXRAT, T_XS_N2, C T_XS_OX, OXSIGS -C RSPRIM.FOR: PRIMPR, SCOLUM, PARAMS, PROBS, PROBN2, YLDISS, PROBO2, -C SCHUMN, FACEUV, FACSR, -C -C turn on printout of intermediate quantities with JPRINT=1 also in PARAMS, PROBS, +C RSPRIM.FOR: PRIMPR, SCOLUM, PARAMS, PROBS, PROBN2, YLDISS, PROBO2, +C SCHUMN, FACEUV, FACSR, +C +C turn on printout of intermediate quantities with JPRINT=1 also in PARAMS, PROBS, C PROBN2, YLDISS, and PROBO2 with ISW=1. -C -C Richards, P. G., D. Bilitza, and D. Voglozin (2010), Ion density calculator (IDC): -C A new efficient model of ionospheric ion densities, Radio Sci., 45, RS5007, +C +C Richards, P. G., D. Bilitza, and D. Voglozin (2010), Ion density calculator (IDC): +C A new efficient model of ionospheric ion densities, Radio Sci., 45, RS5007, C doi:10.1029/2009RS004332. C C Fortran code written by Phil Richards, George Mason University, Fairfax, VA, USA @@ -41,12 +41,12 @@ C C C:::::::::::::::::::::::::::: CHEMION ::::::::::::::::::::::::::: C..... This routine was written by Phil Richards April 2010. This version was -C..... modified in April 2011. +C..... modified in April 2011. C..... It takes the specified input electron density and returns O+, O2+, NO+, C..... N2+, N+, NO, and N(2D) densities. These densities generally agree well C..... with Atmosphere Explorer and FLIP model densities. C..... In this version all the densities except O+ are calculated from chemical -C..... equilibrium. The densities are normalized so that the total ion density +C..... equilibrium. The densities are normalized so that the total ion density C..... matches the input electron density. C..... This version has two modes. If the variable USER_OPLUS is positive it is used C..... to specify the O+ density. If USER_OPLUS is negative, O+ is calculated from @@ -56,8 +56,8 @@ C..... exactly, USER_OPLUS. C..... N+ generally agrees well with AE-C data and the FLIP model during the day C..... up to ~500 km, but is inaccurate at night due to diffusion. C..... The NO densities can either be user specified or calculated by the model. -C..... NO will be very good except below about 130 km where it will be -C..... underestimated due to neglect of diffusion. There is an artificial +C..... NO will be very good except below about 130 km where it will be +C..... underestimated due to neglect of diffusion. There is an artificial C..... floor on the NO density to prevent it from getting too low below 130 km. C..... H+ and He+ are only good during the daytime below ~450 km. C..... The EUVAC model is used for solar EUV irradiances @@ -91,9 +91,9 @@ C..... The EUVAC model is used for solar EUV irradiances REAL NE,N2P,N2D,OP2D,OP2P !.. Total (photon & photoel) production rates O+(4S),O+(2P),O+(2D),O2+ REAL TPROD1,PDISOP,TPROD2,TPROD3,TPROD5 - !.. Total Production rates from all sources for NO+, O2+, + !.. Total Production rates from all sources for NO+, O2+, REAL TPNOP,O2PPROD - !.. Production rates hv(e*)+N2->N+, hv+N->N+, Lyman-a -> NO+ + !.. Production rates hv(e*)+N2->N+, hv+N->N+, Lyman-a -> NO+ REAL DISNP,PHOTN,PLYNOP REAL PSEC !.. generic PE production REAL RTS(99) !.. Reaction rates array @@ -101,7 +101,7 @@ C..... The EUVAC model is used for solar EUV irradiances REAL H,DEX,FEX(2) !.. used in Newton solver REAL SUMIONS !.. Sum of the major ions REAL PNO,LNO,PDNOSR !.. Production and loss of NO - REAL N2A !.. N2(A) density + REAL N2A !.. N2(A) density REAL DISN2D,UVDISN,PN2D,LN2D !.. Production and loss of N(2D) REAL N2APRD !.. PE production rate of N2(A) REAL PN4S,LN4S,DISN4S !.. Production and loss of N(4S) @@ -122,7 +122,7 @@ C..... The EUVAC model is used for solar EUV irradiances CALL RATS(0,TE,TI,TN,RTS) !.. Get the reaction rates - !.. PRIMPR calculates solar EUV production rates. + !.. PRIMPR calculates solar EUV production rates. CALL PRIMPR(1,ALT,OXN,N2N,O2N,HEN,SZAD*0.01745,TN,F107,F107A,N4S) !.. Calculate secondary Production from photoelectrons @@ -131,11 +131,11 @@ C..... The EUVAC model is used for solar EUV irradiances UVDISN=OTHPR1(1) !.. EUV dissociation rate of N2 DISNP= EUVION(3,4)+EUVION(3,5)+EUVION(3,6) - > +0.1*(PEPION(3,1)+PEPION(3,2)+PEPION(3,3)) !.. Rydberg diss - > +PEPION(3,4)+PEPION(3,5)+PEPION(3,6) + > +0.1*(PEPION(3,1)+PEPION(3,2)+PEPION(3,3)) !.. Rydberg diss + > +PEPION(3,4)+PEPION(3,5)+PEPION(3,6) DISN2D=2.0*PEPION(3,1)+OTHPR2(3) DISN4S=2.0*PEPION(3,1)+OTHPR2(3) - PRHEP=OTHPR1(2) !.. He+ photoionization + PRHEP=OTHPR1(2) !.. He+ photoionization !.. initialize variables to avoid using left over values HEPLUS=0.0 @@ -152,7 +152,7 @@ C..... The EUVAC model is used for solar EUV irradiances K=K+1 !.. If K=1 print headers in files - !.. These species don't need to be iterated because they are at + !.. These species don't need to be iterated because they are at !.. the top of the food chain !.. O+(2P) Calculate and print densities, production, loss PSEC=PEPION(1,3) !.. Photoelectron production @@ -166,14 +166,14 @@ C..... The EUVAC model is used for solar EUV irradiances CALL COP2D(JPRINT,8,K,ALT,RTS,OXN,O2N,N2N,NE,OP2D,TPROD2,OP2P > ,HEPLUS,N4S,NNO,PSEC) - !.. O+(4S) Calculate and print densities, production, loss. + !.. O+(4S) Calculate and print densities, production, loss. TPROD1=EUVION(1,1) PDISOP=EUVION(2,4)+EUVION(2,5)+PEPION(2,4)+PEPION(2,5) CALL COP4S(JPRINT,4,K,ALT,RTS,OXN,O2N,N2N,NE,COXPLUS,TPROD1,OP2D > ,OP2P,PEPION(1,1),PDISOP,N2PLUS,N2D,NNO,1.0,HEPLUS) !.. Make sure chemical O+ is not greater than Ne - IF(COXPLUS.GT.NE) COXPLUS=NE + IF(COXPLUS.GT.NE) COXPLUS=NE !.. Choose either user specified or chemical O+ IF(USER_OPLUS.GT.0) THEN @@ -181,7 +181,7 @@ C..... The EUVAC model is used for solar EUV irradiances OXPLUS=(USER_OPLUS+COXPLUS)/2 ELSE !.. Alternative chemical equilibrium O+ calculation - OXPLUS=COXPLUS + OXPLUS=COXPLUS ENDIF !.. N2(A) is used in calculating NO density @@ -190,17 +190,17 @@ C..... The EUVAC model is used for solar EUV irradiances !.. Iterate through chemistry to improve results DO ITERS=1,5 - !.. N2+ Calculate and print densities, production, loss. + !.. N2+ Calculate and print densities, production, loss. CALL CN2PLS(JPRINT,9,K,ALT,RTS,OXN,O2N,N2N,NE,N2PLUS,EUVION(3,1) > ,EUVION(3,2),EUVION(3,3),PEPION(3,1),PEPION(3,2),PEPION(3,3) > ,OP2D,OP2P,HEPLUS,NPLUS,NNO,N4S) - !.. N(2D) Calculate and print densities, production, loss. + !.. N(2D) Calculate and print densities, production, loss. CALL CN2D(JPRINT,16,K,ALT,RTS,OXN,O2N,N2N,NOPLUS,NE,PN2D,LN2D > ,N2PLUS,DISN2D,UVDISN,NPLUS,N2P,N2D,OXPLUS,NNO,N2A) N2D=PN2D/LN2D - !.. N+ Calculate and print densities, production, loss. + !.. N+ Calculate and print densities, production, loss. PHOTN=OTHPR2(3) !.. N+ photo production CALL CNPLS(JPRINT,10,K,ALT,RTS,OXN,O2N,N2N,NE,DISNP,NPLUS, > OXPLUS,N2D,OP2P,HEPLUS,PHOTN,O2PLUS,N4S,OP2D,N2PLUS,NNO) @@ -210,16 +210,16 @@ C..... The EUVAC model is used for solar EUV irradiances > ,N2D,N4S,N2P,NNO,O2PLUS,OXPLUS,OTHPR2(2),OTHPR2(1),N2A,NPLUS) NNO=PNO/LNO !.. NO chemical equilibrium density - !.. Set a floor on NO density, which is needed below ~150 km at night + !.. Set a floor on NO density, which is needed below ~150 km at night IF(NNO.LT.1.0E8*EXP((100-ALT)/20)) NNO=1.0E8*EXP((100-ALT)/20) IF(USER_NO.GT.1.0) NNO=USER_NO !.. substitute user specified value IF(NNO.GT.1.5E8) NNO=1.5E8 !.. Don't let NO get too big - !.. NO+ Calculate and print densities, production, loss. + !.. NO+ Calculate and print densities, production, loss. CALL CNOP(JPRINT,11,K,ALT,RTS,OXN,O2N,N2N,NE,TPNOP,NOPLUS,OXPLUS > ,N2PLUS,O2PLUS,N4S,NNO,NPLUS,N2P,PLYNOP,1.0,N2D,OP2D) - !.. O2+ Calculate and print densities, production, loss. + !.. O2+ Calculate and print densities, production, loss. !.. EUV + PE production TPROD5=EUVION(2,1)+EUVION(2,2)+EUVION(2,3)+PEPION(2,1)+ > PEPION(2,2)+PEPION(2,3) @@ -228,7 +228,7 @@ C..... The EUVAC model is used for solar EUV irradiances SUMIONS=OXPLUS+NOPLUS+O2PLUS+NPLUS+N2PLUS - !.. Chemical equilibrium densities are normalized to the input NE + !.. Chemical equilibrium densities are normalized to the input NE !.. and return. IF(ITERS.EQ.5.OR.ABS(SUMSAVE-SUMIONS)/SUMIONS.LT.0.01) THEN OXPLUS=OXPLUS*NE/SUMIONS @@ -238,7 +238,7 @@ C..... The EUVAC model is used for solar EUV irradiances NPLUS=NPLUS*NE/SUMIONS RETURN ENDIF - SUMSAVE=SUMIONS + SUMSAVE=SUMIONS ENDDO RETURN @@ -350,7 +350,7 @@ C::::::::::::::::::::::::::::::: N(4S)::::::::::::::::::::::::::::::::::::::: 7 FORMAT(F6.1,1P,22E8.1) END C::::::::::::::::::::::::::::::: CN2PLS ::::::::::::::::::::::::::::::: -C..... Simplified chemistry of N2+. PUN2P* = production of N2+ by euv +C..... Simplified chemistry of N2+. PUN2P* = production of N2+ by euv C..... in the (X,A,B states). PEN2P* same for p.e.s (X,A,B states) SUBROUTINE CN2PLS(JPR,I,JPT,Z,RTS,ON,O2N,N2N,NE,N2PLS,PUN2PX, > PUN2PA,PUN2PB,PEN2PX,PEN2PA,PEN2PB,OP2D,OP2P,HEPLUS,NPLUS, @@ -407,7 +407,7 @@ C:::::::::::::::::::::::::::::: NO+ :::::::::::::::::::::::::::::::::: PR(10)=N2PLS*NNO*RTS(80) !..Fox PR(11)=NPLUS*NNO*RTS(81) !..Fox PR(12)=RTS(83)*NNO*OP2D !..Fox - PR(13)=OP2D*RTS(90)*N2N !.. -> NO+ + N, Li et al. [1997] + PR(13)=OP2D*RTS(90)*N2N !.. -> NO+ + N, Li et al. [1997] LR(1)=NE*RTS(5) P1=PR(1)+PR(2)+PR(3)+PR(4)+PR(5)+PR(6)+PR(7)+PR(8) > +PR(9)+PR(10)+PR(11)+PR(12)+PR(13) @@ -502,7 +502,7 @@ C::::::::::::::::::::::::::::::::::: O+(2D) ::::::::::::::::::::::::::::::::::: LR(5)=RTS(43)*O2N LR(6)=RTS(83)*NNO !..Fox LR(7)=RTS(84)*N4S !..Fox - LR(8)=RTS(90)*N2N !.. -> NO+ + N, Li et al. [1997] + LR(8)=RTS(90)*N2N !.. -> NO+ + N, Li et al. [1997] OP2D=(PR(1)+PR(2)+PR(3)+PR(4)+PR(5))/ > (LR(1)+LR(2)+LR(3)+LR(4)+LR(5)+LR(6)+LR(7)+LR(8)) IF(JPT.EQ.1.AND.JPR.GT.0) WRITE(I,99) @@ -635,7 +635,7 @@ C..... 21-AUG-1992. Added N2+ recombination source C:::::::::::::::::::::::::::::: NO+(v) :::::::::::::::::::::::::::::::::: C...... This routine calculates the vibrational distribution of no+ C...... Uses AFRL report by Winick et al. AFGL-TR-87-0334, Environmental -C...... Research papers, NO. 991, "An infrared spectral radiance code +C...... Research papers, NO. 991, "An infrared spectral radiance code C...... for the auroral thermosphere (AARC) C...... Written by P. Richards in February 2004 SUBROUTINE CNOPV(JPR,I,JPT,Z,RTS,ON,O2N,N2N,NE,P1,NOP,OPLS @@ -645,11 +645,11 @@ C...... Written by P. Richards in February 2004 PARAMETER (INV=20) !.. NO+(v) array dimensions REAL Z,RTS(99), !.. Altitude, rate coefficients > ON,O2N,N2N,NE, !.. O, N2, O2, electron densities - > P1, !.. total source output for finding [e] + > P1, !.. total source output for finding [e] > NOP,OPLS,N2PLS,O2P, !.. NO+, )+,N2+,O2+ densities > N4S,NNO,NPLUS,N2P, !.. N(4S), NO, N+, N(2P) densities > PLYNOP,VCON, !.. Lyman-a source, N2(v) rate factor - > N2D,OP2D, !.. N(2D), O+(2D) densities + > N2D,OP2D, !.. N(2D), O+(2D) densities > NOPV(INV),NOPTOT, !.. NO+(v) densities and total NO+ density > LR(22),PR(22), !.. storage for NO+ sources and sinks > EINSCO1(INV),EINSCO2(INV), !.. Einstein coeffs for delv=1,2 @@ -681,8 +681,8 @@ C...... Written by P. Richards in February 2004 DATA EINSCO2/0.0,0.0,.697,1.93,3.61,5.74,8.24,11.1,14.2,17.7, > 21.3,25.1,29.0,33.2,37.4,5*40.0/ !.. Einstein coeff delv=1 !.. rate factors for NO+(v)+e -> N + O. Sheehan and St-Maurice 2004 - DATA LRV/1.0,19*0.3333/ - + DATA LRV/1.0,19*0.3333/ + !... Evaluate total production and loss rates PR(1)=VCON*RTS(3)*N2N*OPLS !.. N2 + O+ PR(2)=N2PLS*ON*RTS(10) !.. N2+ + O @@ -697,7 +697,7 @@ C...... Written by P. Richards in February 2004 PR(10)=N2PLS*NNO*RTS(80) !.. Fox: N2+ + NO PR(11)=NPLUS*NNO*RTS(81) !.. Fox: N+ + NO PR(12)=RTS(83)*NNO*OP2D !.. Fox: O+(2D) + NO - PR(13)=OP2D*RTS(90)*N2N !.. -> NO+ + N, Li et al. [1997] + PR(13)=OP2D*RTS(90)*N2N !.. -> NO+ + N, Li et al. [1997] LR(1)=NE*RTS(5) !.. NO+ + e !..Total source term used in main program to calculate [e] @@ -710,10 +710,10 @@ C...... Written by P. Richards in February 2004 ENDDO NOPTOT=0.0 - !.. loop down evaluating the vibrational populations. Must start + !.. loop down evaluating the vibrational populations. Must start !.. less than INV-1 because need cascade from v+2 DO IV=INV-4,1,-1 - !... chemical production for v=IV = total source * fraction + !... chemical production for v=IV = total source * fraction PNOPV=PR(1)*PRV1(IV)+PR(2)*PRV2(IV)+PR(3)*PRV3(IV)+ > PR(4)*PRV4(IV)+PR(5)*PRV5(IV)+PR(6)*PRV6(IV)+ > PR(7)*PRV7(IV)+PR(8)*PRV8(IV)+PR(9)*PRV9(IV)+ @@ -735,7 +735,7 @@ C...... Written by P. Richards in February 2004 !... diagnostic print. Set alt range to invoke IF(JPR.GT.0.AND.Z.GE.0.AND.Z.LT.10) - > WRITE(6,'(F10.1,I7,1P,22E10.2)') + > WRITE(6,'(F10.1,I7,1P,22E10.2)') > Z,IV,PNOPV,P1,PCASC,P_N2_Q,LNOPV,LRAD,L_N2_Q, > NOPV(IV),NOP,NOPTOT ENDDO @@ -753,7 +753,7 @@ C...... Written by P. Richards in February 2004 END C C -C.................................... RATES.FOR ................. +C.................................... RATES.FOR ................. C.... This is the reaction rate subroutine for the FLIP model. It takes C.... temperatures as input and puts the rates in array RTS. It includes C.... reaction rates, efficiencies for various products, and Einstein @@ -776,23 +776,23 @@ C.... 2001, page 21,305. Rates different from Fox and Sung indicated by PGR !.. O+ + H -> O + H+ Anicich et al. [1993] RTS(2)=6.4E-10 - !.. O+ + N2 --> NO+ + N, Hierl et al.[1997] - !.. The Hierl et al. [1997] lab rate is contaminated by N2(v) - !.. for T > 1300K. Therefore, the Hierl et al. rate is not really - !.. appropriate in the ionosphere. The IDC model uses the Hierl et - !.. al. rate because it does not solve for N2(v). The FLIP model + !.. O+ + N2 --> NO+ + N, Hierl et al.[1997] + !.. The Hierl et al. [1997] lab rate is contaminated by N2(v) + !.. for T > 1300K. Therefore, the Hierl et al. rate is not really + !.. appropriate in the ionosphere. The IDC model uses the Hierl et + !.. al. rate because it does not solve for N2(v). The FLIP model !.. solves for N2(v) and uses the St. Maurice and Torr rate (JGR,1978,p969) - IF(TI.LE.1000) RTS(3)=1.2E-12*(300/TI)**0.45 !.. Hierl et al.[1997] - IF(TI.GT.1000) RTS(3)=7.0E-13*(TI/1000)**2.12 !.. Hierl et al.[1997] - - !.. O+ + O2 -> O2+ + O, Lindinger et al. [1974] - !.. Hierl et al. lists different rates. Hierl et al. [1997] not - !.. used above 1600 because rates are contaminated by O2(v) for - !.. T > 1000K. We don't know the vibrational state in the - !.. thermosphere. This fit was done by PGR May 2009. It is similar + IF(TI.LE.1000) RTS(3)=1.2E-12*(300/TI)**0.45 !.. Hierl et al.[1997] + IF(TI.GT.1000) RTS(3)=7.0E-13*(TI/1000)**2.12 !.. Hierl et al.[1997] + + !.. O+ + O2 -> O2+ + O, Lindinger et al. [1974] + !.. Hierl et al. lists different rates. Hierl et al. [1997] not + !.. used above 1600 because rates are contaminated by O2(v) for + !.. T > 1000K. We don't know the vibrational state in the + !.. thermosphere. This fit was done by PGR May 2009. It is similar !.. to Fox and Sung but does not increase sharply above 1000K. IF(TI.LE.1600) RTS(4)=1.6E-11*(300/TI)**0.52 - IF(TI.GT.1600) RTS(4)=6.7E-12*(TI/1600)**0.6 + IF(TI.GT.1600) RTS(4)=6.7E-12*(TI/1600)**0.6 !.. NO+ + e -> N + O Walls and Dunn [1974) !.. Vejby-Christensen et al [1998] gives 4.0E-7*(300/TE)**0.5 @@ -811,7 +811,7 @@ C.... 2001, page 21,305. Rates different from Fox and Sung indicated by PGR RTS(8)=3.86E-10*(TE/300.)**0.81 !.. NO + N(4S) -> N2 + O Lee et al. [1978] - RTS(9)=3.4E-11 + RTS(9)=3.4E-11 !.. N2+ + O -> NO+ + N Scott et al.[1999] IF(TI.LE.1500) RTS(10)= 1.33E-10*(300/TI)**0.44 @@ -825,7 +825,7 @@ C.... 2001, page 21,305. Rates different from Fox and Sung indicated by PGR RTS(12)=6.03E-8*(300/TE)**0.5 !.. O+(2P) + e -> O+(2D) + e McLaughlin and Bell (1998) - !.. RTS(13)+RTS(14) agrees with Walker et al (1975) and + !.. RTS(13)+RTS(14) agrees with Walker et al (1975) and !.. Chang et al (1993) RTS(13)=1.84E-7*(300/TE)**0.5 @@ -852,28 +852,28 @@ C.... 2001, page 21,305. Rates different from Fox and Sung indicated by PGR > +0.357E-4*TE-(0.333+0.183E-4*TE)*EXP(-1.37E4/TE) > -(0.456+0.174E-4*TE)*EXP(-2.97E4/TE)) - !.. N2 + O+(2D) -> N2+ + O + !.. N2 + O+(2D) -> N2+ + O !..RTS(19)=8.0E-10 !.. Johnson and Biondi RTS(19)=1.50E-10*(300/Ti)**(-0.55) !.. Li et al by PGR - - !.. N2 + O+(2P) -> N2+ + 0 Fox + + !.. N2 + O+(2P) -> N2+ + 0 Fox !.. RTS(20)=6.2E-10*EXP(-340/TI) !.. Li et al from Fox wrong RTS(20)=2.0E-10*(300/Ti)**(-0.55) !.. Li et al by PGR !.. O2+ + N(4S) -> NO+ + 0 Scott et al.[1999] RTS(21)=1.0E-10 - !.. N+ + O2 -> O+ + NO + !.. N+ + O2 -> O+ + NO !.. Torr and Torr gives 6.0E-10 for total N+ + O2 reaction rate !.. Dotan et al [1997] from Fox and Sung gives !IF(TI.LE.1000) TOT_NP_O2_RATE=2.02E-10*(300/TI)**(-0.45) !IF(TI.GT.1000) TOT_NP_O2_RATE=3.49E-10 !.. does not seem to be correct. Probably vibrationally excited O2 !.. Branching ratios for N+ + O2 from O'Keefe et al J. Chem. Phys. 1986 - !.. NO+ +O(3P) = .09, NO+ + O(1D) = .36, O2+ + N(4S) = 0.35, + !.. NO+ +O(3P) = .09, NO+ + O(1D) = .36, O2+ + N(4S) = 0.35, !.. O2+ + N(2D) = 0.15, O+(4S) + NO = .05 TOT_NP_O2_RATE=6.0E-10 !.. Total N+ + O2 rate - RTS(22)=0.05*TOT_NP_O2_RATE + RTS(22)=0.05*TOT_NP_O2_RATE !.. O2+ + NO -> NO+ + O2 Midey and Viggiano [1999] RTS(23)=4.5E-10 * 1.0000 @@ -882,15 +882,15 @@ C.... 2001, page 21,305. Rates different from Fox and Sung indicated by PGR IF(TI.LE.300) RTS(24)=7.0E-13*(300/TI)**0.66 IF(TI.GT.300) RTS(24)=7.0E-13*(TI/300)**0.87 - !.. N+ + O2 -> O2+ + N(4S) - RTS(25)=0.35*TOT_NP_O2_RATE + !.. N+ + O2 -> O2+ + N(4S) + RTS(25)=0.35*TOT_NP_O2_RATE - !.. O+(2P) + O -> O+(4S) + O - !..RTS(26)=5.2E-10 !.. Fox appears to be wrong - !.. (Chang et al., JGR 1993) c.f. 5.2E-11 (Rusch) + !.. O+(2P) + O -> O+(4S) + O + !..RTS(26)=5.2E-10 !.. Fox appears to be wrong + !.. (Chang et al., JGR 1993) c.f. 5.2E-11 (Rusch) RTS(26)=4.0E-10 - !.. N2(A3sig) + O -> NO + N(2D) + !.. N2(A3sig) + O -> NO + N(2D) RTS(27)=2.0E-11 !..see Campbell et al. 2006 RTS(27)=0.000000 !.. Torr and Torr value @@ -902,7 +902,7 @@ C.... 2001, page 21,305. Rates different from Fox and Sung indicated by PGR !.. O2 + N+ -> O(3P) + NO+ !.. Branching ratio from O'Keefe et al J. Chem. Phys. 1968 - RTS(30)=0.09*TOT_NP_O2_RATE + RTS(30)=0.09*TOT_NP_O2_RATE !.. O + N+ -> O+ + N Constantinides et al.[1979].Bates[1989] RTS(31)=2.2E-12 @@ -924,21 +924,21 @@ C.... 2001, page 21,305. Rates different from Fox and Sung indicated by PGR RTS(36)=2.5E-11*EXP(TN/298)**0.55 !.. see Campbell et al. 2006 RTS(36)=2.0E-11 ! .. Torr et al. - !.. N(2P) + O -> products (N(2D,4S) and NO+) and O(3P,1D) + !.. N(2P) + O -> products (N(2D,4S) and NO+) and O(3P,1D) !.. from Piper et al 1993, J. Chem. Phys. vol 98 page 8560. RTS(37)=1.7E-11 - !.. N(2P) + O2 -> NO + O + !.. N(2P) + O2 -> NO + O RTS(38)=3.9E-12*EXP(-60/TN) !.. N(2P) quenching rates(O2+,NO) from Zipf et al jgr 1980 p687 RTS(39)=2.2E-11 RTS(40)=1.8E-10 - !.. N(2D) + NO -> N2 + O + !.. N(2D) + NO -> N2 + O RTS(41)=6.7E-11 - !.. efficiency N2+ + O -> N2 + O+(4S) + !.. efficiency N2+ + O -> N2 + O+(4S) IF(TI.LE.1500) RTS(42)= 7.0E-12*(300/TI)**0.21 IF(TI.GT.1500) RTS(42)= 4.83E-12*(1500/TI)**(-0.41) RTS(42)=RTS(42)/RTS(10) !.. converts to efficiency @@ -952,13 +952,13 @@ C.... 2001, page 21,305. Rates different from Fox and Sung indicated by PGR !.. He+ + N2 -> He + N+ RTS(45)=7.8E-10 - !.. O(1S)+ e -> O(1D) + e + !.. O(1S)+ e -> O(1D) + e RTS(46)=8.5E-9 - !.. O(1S)+ e -> O(3P) + e + !.. O(1S)+ e -> O(3P) + e RTS(47)=1.56E-10*(TE/300)**0.94 - !.. O(1S) + O2 -> O2 + O + !.. O(1S) + O2 -> O2 + O RTS(48)=4.4E-12*EXP(-815.0/TN) !.. NO+ + e -> N(4S) + O @@ -976,7 +976,7 @@ C.... 2001, page 21,305. Rates different from Fox and Sung indicated by PGR !.. Efficiency for N2+ + e -> N(4S) + N(2D) RTS(53)=0.46 - !.. O(1D) -> O + 6300 + 6364 + !.. O(1D) -> O + 6300 + 6364 RTS(54)=0.00934 !.. O(1S) -> O(1D) + 5577 @@ -992,7 +992,7 @@ C.... 2001, page 21,305. Rates different from Fox and Sung indicated by PGR RTS(58)=5.0E-3 !.. N+ + O2 -> NO+ + O(1S) Langford et al., PSS, 33,1225,1985 - RTS(59)=1.0E-3*TOT_NP_O2_RATE + RTS(59)=1.0E-3*TOT_NP_O2_RATE !.. Efficiency for N2(A3sig) + O -> O(1S) + N2 RTS(60)=0.37 @@ -1011,11 +1011,11 @@ C.... 2001, page 21,305. Rates different from Fox and Sung indicated by PGR !.. N+ + O2 -> O2+ + N(2D) !.. Branching ratio from O'Keefe et al J. Chem. Phys. 1968 - RTS(65)=0.15*TOT_NP_O2_RATE + RTS(65)=0.15*TOT_NP_O2_RATE !.. N+ + O2 -> NO+ + O(1D) !.. Branching ratio from O'Keefe et al J. Chem. Phys. 1968 - RTS(66)=0.36*TOT_NP_O2_RATE + RTS(66)=0.36*TOT_NP_O2_RATE !.. hv(Scum-Runge) + O2 -> O(1S) + O branching ratio RTS(67)=0.001 @@ -1026,8 +1026,8 @@ C.... 2001, page 21,305. Rates different from Fox and Sung indicated by PGR !.. O(1D) + O -> O + O Abreu et al. PSS, p1143, 1986 RTS(69)=6.47E-12*(TN/300)**0.14 - !.. hv + N2 -> N+(5S) -> 2143 A emission yield from the 2s sigma g state - !.. of N2. This was taken as 0.6 the value of Cleary and Barth JGR 1987, + !.. hv + N2 -> N+(5S) -> 2143 A emission yield from the 2s sigma g state + !.. of N2. This was taken as 0.6 the value of Cleary and Barth JGR 1987, !.. p13,635 because they did not double EUV below 250 A. RTS(70)=0.06 @@ -1047,7 +1047,7 @@ C.... 2001, page 21,305. Rates different from Fox and Sung indicated by PGR !.. He+ + O2 -> He + O2+ RTS(75) = 9.2E-12 - !.. He+ + O2 -> He + O+(2D) + O(3P) + !.. He+ + O2 -> He + O+(2D) + O(3P) RTS(76) = 2.37E-10 !.. O2+ + N(2D) -> NO+ + O @@ -1088,16 +1088,16 @@ C.... 2001, page 21,305. Rates different from Fox and Sung indicated by PGR !.. H+ + O2 -> O2+ + H RTS(89)=3.8E-9 - + !.. O+(2D) + N2 -> NO+ + N !.. Li et al. (1997). !.. From the ratio of the cross sections. !.. The branching ratio to O+(4S) + N2 not given by Li et al. RTS(90)=2.5E-11 - !.. He+ + O2 -> He + O+(4S) + O + !.. He+ + O2 -> He + O+(4S) + O RTS(91) = 2.39E-11 - !.. He+ + O2 -> He + O+(2P) + O + !.. He+ + O2 -> He + O+(2P) + O RTS(92) = 6.04E-10 !.. He+ + O2 -> He + O+(4S) + O(1D) @@ -1111,7 +1111,7 @@ C.... 2001, page 21,305. Rates different from Fox and Sung indicated by PGR !.. N(2P) + e -> N(4S) + e RTS(96)=2.04E-10*(TE/300)**0.85 - + !.. N(2P) + e -> N(2D) + e RTS(97)=9.5E-9 @@ -1182,7 +1182,7 @@ C..... Calculate secondary ion production, electron heating rate and 3371 excita > TE,TN,XN,XNE,XN2D,XOP2D,PEFLUX,AFAC,IMAX,DE,EV) !*************************************************************** - !........ sample calculation of ion production rates. + !........ sample calculation of ion production rates. DO I=1,IMAX E=EV(I) CALL TXSION(E,SIGIT) !.. total ion XS @@ -1215,17 +1215,17 @@ c > T_XS_N2(EP),PEPION(1,1),PEXCIT(1,1) END C:::::::::::::::::::::::::: PHOTOELECTRON MODEL :::::::::::::::::::::::: C....... This subroutine evaluates the photoelectron flux using the concept -C....... production frequencies developed by Phil Richards at Utah +C....... production frequencies developed by Phil Richards at Utah C....... State University March 1984. It supercedes the model described in C....... JGR, p2155, 1983. Contact EAST::CSPARA::RICHARDS on SPAN network C------- Some minor updates in April 1992 indicated by C---- -C....... I would appreciate any feedback on bugs or clarity and if it -C....... contributes substantially to a paper, I would appreciate the +C....... I would appreciate any feedback on bugs or clarity and if it +C....... contributes substantially to a paper, I would appreciate the C....... appropriate acknowledgement. C...... **************** WARNING **************** C...... This program is constructed to produce reasonable agreement with C...... the Atmosphere Explorer-E PES fluxes of John Doering (Lee et al. -C...... PSS 1980, page 947). It will NOT give good fluxes if the EUV +C...... PSS 1980, page 947). It will NOT give good fluxes if the EUV C...... attenuation is greater than about a factor of 7 (AFAC < 0.14). C...... The model accurately reproduces the measured fluxes very closely C...... for the case in the test driver at 148 km SZA=53 when AFAC=0.19. @@ -1234,8 +1234,8 @@ C...... periodically as a check. It is doubtful below 140km during the C...... day and below 200km near sunset. Between 200km & 350km, it should C...... be good for solar zenith angles < 90 degrees. Above 350 km there C...... is considerable uncertainty due to neglect of transport but most -C...... models have similar uncertainties at high altitudes due to the -C...... uncertainty in the conjugate photoelectron flux, and the pitch +C...... models have similar uncertainties at high altitudes due to the +C...... uncertainty in the conjugate photoelectron flux, and the pitch C...... angle distribution. C C------ ALT = altitude (km) { 120 -> 500 } @@ -1350,8 +1350,8 @@ c COMMON/SOL/UVFAC(59),EUV !..... Production of pe's at energy EE, taking into account !..... attenuation and EUV variation, and renormalize frequencies - PRODOX=RJOX(I)*XN(1)*AFAC*FFAC*1.0E-9 - PRODN2=RJN2(I)*XN(3)*AFAC*FFAC*1.0E-9 + PRODOX=RJOX(I)*XN(1)*AFAC*FFAC*1.0E-9 + PRODN2=RJN2(I)*XN(3)*AFAC*FFAC*1.0E-9 !..... Sum all the production rates PROD=PRODOX+PRODN2+CASEL+CASOX+CASN2+EPN2D+EPOP2D @@ -1426,7 +1426,7 @@ C..... with the Schram et al. cross sections at high energies !... N2+ cross section SIGIT(3)=0.0 - IF(E.GT.15.0) SIGIT(3)=1.42E-14*(1-9.0/E)**7.1*E**(-0.7) + IF(E.GT.15.0) SIGIT(3)=1.42E-14*(1-9.0/E)**7.1*E**(-0.7) IF(SIGTMP.LT.SIGIT(3)) SIGIT(3)=SIGTMP !... This correction to convert units to cm**2. Keiffer and Dunn page 10 SIGIT(3)=0.87972*SIGIT(3) @@ -1474,23 +1474,23 @@ C.... cross section. P. Richards 2003-10-04 DATA ESAVE/0.0/ !.. Wavelength < 20 A, Auger ionization - IF(EP.GE.600.0) THEN + IF(EP.GE.600.0) THEN T_XS_N2=0.5E-18 !.. Wavelength < 31 A, Auger ionization - ELSEIF(EP.GE.400.0) THEN + ELSEIF(EP.GE.400.0) THEN T_XS_N2=1.0E-18 !.. Wavelength 31.62 to 23.70 A ELSEIF(EP.GE.392.0) THEN T_XS_N2=EXP(7.9864*ALOG(EP)-91.6604) !.. Wavelength 225 to 125 A ELSEIF(EP.GE.55.09) THEN - T_XS_N2=EXP(-2.3711*ALOG(EP)-29.8142) + T_XS_N2=EXP(-2.3711*ALOG(EP)-29.8142) !.. Wavelength > 225 A ELSE - T_XS_N2=EXP(-1.1077*ALOG(EP)-34.8787) + T_XS_N2=EXP(-1.1077*ALOG(EP)-34.8787) ENDIF - !..IF(NINT(10*EP).NE.NINT(10*ESAVE)) WRITE(6,'(2F8.1,1P,2E10.2)') + !..IF(NINT(10*EP).NE.NINT(10*ESAVE)) WRITE(6,'(2F8.1,1P,2E10.2)') !..> 12394.224/EP,EP, T_XS_N2/(3.39E-17*EXP(-0.0263*EP)), T_XS_N2 ESAVE=EP @@ -1511,21 +1511,21 @@ C.... Samson and Pareek Phys. Rev. A, 31, 1470, 1985 DATA ESAVE/0.0/ !.. NEW parameterization - IF(EP.GE.500.0) THEN + IF(EP.GE.500.0) THEN !.. Wavelength shorter than 25 A, Auger ionization T_XS_OX=0.5E-18 - ELSEIF(EP.GE.165.26) THEN + ELSEIF(EP.GE.165.26) THEN !.. Wavelength shorter than 75 A T_XS_OX=EXP(-2.5209*ALOG(EP)-28.8855) - ELSEIF(EP.GE.55.09) THEN + ELSEIF(EP.GE.55.09) THEN !.. Wavelength between 78 and 256.26 A T_XS_OX=EXP(-1.7871*ALOG(EP)-32.6335) ELSE !.. Wavelength longer than 256.26 A - T_XS_OX=EXP(-1.3077*ALOG(EP)-34.5556) + T_XS_OX=EXP(-1.3077*ALOG(EP)-34.5556) ENDIF - !..IF(NINT(10*EP).NE.NINT(10*ESAVE)) WRITE(6,'(2F8.1,1P,2E10.2)') + !..IF(NINT(10*EP).NE.NINT(10*ESAVE)) WRITE(6,'(2F8.1,1P,2E10.2)') !..> 12394.224/EP,EP, T_XS_OX/(27.2E-18*EXP(-3.09E-2*EP)), T_XS_OX ESAVE=EP @@ -1571,8 +1571,8 @@ C C C.................... RSPRIM.FOR .................................. C.... This routine evaluates the ionization rates for photon impact -C.... It is based on a FLIP model routine that was modified in August -C.... 2009 for the chemical equilibrium model by P. richards. +C.... It is based on a FLIP model routine that was modified in August +C.... 2009 for the chemical equilibrium model by P. richards. SUBROUTINE PRIMPR(IJ,Z,ZOX,ZN2,ZO2,HE,SZA,TN,F107,F107A,N4S) IMPLICIT NONE INTEGER IVERT,I,IJ,IK,IPROBS,IS,K,L,LMAX,NNI,K1 @@ -1585,9 +1585,9 @@ C.... 2009 for the chemical equilibrium model by P. richards. REAL COLUMN(3),XN(3),PROB(3,6,37),XSNPLS(37),FNITE(37),CLNITE(3) cpgr REAL TPROB(3,6,37) -cpgr +cpgr - !-- common to hold the EUV and photoelectron production rates + !-- common to hold the EUV and photoelectron production rates COMMON/EUVPRD/EUVION(3,12),PEXCIT(3,12),PEPION(3,12), > OTHPR1(6),OTHPR2(6) COMMON/SIGS/ZFLUX(37),SIGABS(3,37),ZLAM(37),SIGION(3,37), @@ -1598,20 +1598,20 @@ cpgr DATA LMAX/0/, F107SV/0.0/, IPROBS/0/ !.. Fluxes for nighttime ion production in the 37 wavelength bins of !.. Torr et al GRL 1979. The fluxes are set to reproduce the production - !.. rates in Strobel et al. PSS, p1027, 1980. Note that most bins are - !.. set to zero and that the Strobel production rates are scaled by + !.. rates in Strobel et al. PSS, p1027, 1980. Note that most bins are + !.. set to zero and that the Strobel production rates are scaled by !.. FNFAC to stabilize the O+ solution below 200 km. Note also that !.. the wavelengths in FNITE go from largest (#3=HI) to smallest. DATA FNITE/9E5,0.0,9E5,2*0.0,9E6,13*0.0,3E5,8*0.0,3E5,8*0.0/ DATA FNFAC/1.0/ !.. UVFAC(58) is left over from FLIP routines for compatibility - UVFAC(58)=-1.0 + UVFAC(58)=-1.0 IF(ABS((F107-F107SV)/F107).GT.0.005) THEN !.. update UV flux factors CALL FACEUV(UVFAC,F107,F107A) CALL FACSR(UVFAC,F107,F107A) - + !.. call params to get solar flux data and cross sections CALL PARAMS(0,LMAX) F107SV=F107 @@ -1630,7 +1630,7 @@ cpgr IPROBS=1 ENDIF - !... initialization of production rates. 1.0E-15 stabilizes + !... initialization of production rates. 1.0E-15 stabilizes !... e density evaluation at low altitudes in CMINOR DO 10 IS=1,3 DO 10 IK=1,12 @@ -1677,7 +1677,7 @@ C........ OTHPR1(3)= dissociation rate. OTHPR1(5)= Energy CALL SCHUMN(IJ,Z,ZO2,COLUMN,OTHPR1(3),OTHPR1(5)) C C---- Calculate hv + NO ion. freq. from Lyman-a (Brasseur & Solomon) -C---- OTHPR2(2) is photodissociation of NO in the SR bands. +C---- OTHPR2(2) is photodissociation of NO in the SR bands. C---- A small night production from scattered light is included. FREQLY C---- varies with solar activity using Richards et al. 1994 page 8981 C---- LY_a=2.5E11 (Lean), sigi(NO)=2.0E-18 (Brasseur & Solomon page 329) @@ -1689,7 +1689,7 @@ C---- LY_a=2.5E11 (Lean), sigi(NO)=2.0E-18 (Brasseur & Solomon page 329) > +0.001*EXP(-O2SRXS*CLNITE(2))) C !.. wavelength loop begins here ---------- - !.. TAU, TAUN = optical depth for day, night + !.. TAU, TAUN = optical depth for day, night HEPLS=0.0 DO 6 L=1,LMAX TAU=0. @@ -1738,7 +1738,7 @@ C DO 304 I=1,3 XNSIGF=XN(I)*SIGION(I,L)*FLUX K1=NNI(I) - + !.. dspect=# ions formed by w-l l by ionization of k state of species i DO 302 K=1,K1 DSPECT=XNSIGF*PROB(I,K,L) @@ -1798,7 +1798,7 @@ C.... the MSIS model at grazing incidence IF(CHI.LT.1.5708) GO TO 2938 !.. is sza>90.0 degrees - !..Grazing incidence parameters + !..Grazing incidence parameters ALTG=(6371.0E5+Z)*SIN(3.1416-CHI)-6371.0E5 IF(ALTG.GE.85*1.0E5) THEN ZG=ALTG*1.E-5 @@ -1809,7 +1809,7 @@ C.... the MSIS model at grazing incidence GTN=MAX(TINF-(TINF-300.0)*EXP(-0.025*XI),180.0) !.. Neutral densities are extrapolated from altitude to grazing - !.. altitude. Weighted average Tn and GTn is used + !.. altitude. Weighted average Tn and GTn is used GR=GE*(RE/(RE+Z))**2 !.. gravity DO I=1,3 GN(I)=XN(I)*EXP((Z-ALTG)/ @@ -1898,7 +1898,7 @@ C........ absorption cross sections -- o first ,o2, then n2 > ,14.18,120.49,24.662,26.54,31.755,23.339,23.37,22.79,22.787 > ,22.4,24.13,24.501,23.471,23.16,21.675,16.395,16.91,13.857 > ,11.7,11.67,10.493,10.9,10.21,8.392,4.958,2.261,0.72/ -C....... ionization cross sections +C....... ionization cross sections DATA X2/5*0.0,1.315,4.554,3.498,5.091,3.749,3.89,4,10.736,11.46 > ,17.245,13.365,13.4,13.4,13.024,13.09,12.59,12.059,12.127,11.93 > ,11.496,9.687,9.84,8.693,7.7,7.68,6.461,7.08,6.05,5.202,3.732 @@ -2181,7 +2181,7 @@ C----- (F107+F107A)/2 > ,1.439,2.941,1.399,2.416,1.512,1.365,1.570,1.462,2.537,1.393 > ,1.572,1.578,1.681,1.598,1.473,1.530,1.622,1.634,1.525/ - !-- Test to see if need to scale - see DATRD2 subroutine + !-- Test to see if need to scale - see DATRD2 subroutine IF(NINT(UVFAC(58)).EQ.-1.OR.NINT(UVFAC(58)).EQ.-3) THEN !........... EUV scaling F107AV=(F107+F107A)*0.5 @@ -2207,7 +2207,7 @@ C........ from Torr et al. GRL 1980 p6063 DATA SRA/25.5,20.7,13.2,11.6,11.3,7.86,7.68,4.56/ DATA SRB/222.,129.,53.4,36.0,25.0,11.3,6.35,2.05/ C -C---- Test to see if need to scale - see DATRD2 subroutine +C---- Test to see if need to scale - see DATRD2 subroutine !IF(NINT(UVFAC(58)).EQ.-1.OR.NINT(UVFAC(58)).EQ.-3) THEN C DO 505 I=38,50 diff --git a/RMextract/pyiri/irifun.for b/RMextract/pyiri/irifun.for index ab9ef16..a522e6c 100644 --- a/RMextract/pyiri/irifun.for +++ b/RMextract/pyiri/irifun.for @@ -1,36 +1,36 @@ c irifun.for, version number can be found at the end of this comment. c----------------------------------------------------------------------- -C Functions and subroutines for the International Reference Ionosphere +C Functions and subroutines for the International Reference Ionosphere C (IRI) model. These functions and subroutines are called by the main C IRI subroutine IRI_SUB in IRISUB.FOR. c- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -c Required i/o units: +c Required i/o units: c KONSOL= 6 Program messages (used when jf(12)=.true. -> konsol) c KONSOL=11 Program messages (used when jf(12)=.false. -> MESSAGES.TXT) c -c COMMON/iounit/konsol,mess is used to pass the value of KONSOL from +c COMMON/iounit/konsol,mess is used to pass the value of KONSOL from c IRISUB to IRIFUN and IGRF. If mess=false then messages are turned off. -c -c UNIT=12 TCON: Solar/ionospheric indices IG12, R12 (IG_RZ.DAT) -c UNIT=13 APF,APFMSIS,APF_ONLY: Magnetic indices and F10.7 (APF107.DAT) +c +c UNIT=12 TCON: Solar/ionospheric indices IG12, R12 (IG_RZ.DAT) +c UNIT=13 APF,APFMSIS,APF_ONLY: Magnetic indices and F10.7 (APF107.DAT) c c I/o Units used in other programs: c IUCCIR=10 in IRISUB for CCIR and URSI coefficients (CCIR%%.ASC, %%=month+10) c UNIT=14 in IGRF/GETSHC for IGRF coeff. (DGRF%%%%.DAT, %%%%=year) c- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - c changes from IRIFU9 to IRIF10: -c SOCO for solar zenith angle +c SOCO for solar zenith angle c ACOS and ASIN argument forced to be within -1 / +1 c EPSTEIN functions corrected for large arguments c- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -c changes from IRIF10 to IRIF11: +c changes from IRIF10 to IRIF11: c LAY subroutines introduced c TEBA corrected for 1400 km c- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - c changes from IRIF11 to IRIF12: -C Neutral temperature subroutines now in CIRA86.FOR +C Neutral temperature subroutines now in CIRA86.FOR C TEDER changed -C All names with 6 or more characters replaced +C All names with 6 or more characters replaced C 10/29/91 XEN: 10^ in loop, instead of at the end C 1/21/93 B0_TAB instead of B0POL C 9/22/94 Alleviate underflow condition in IONCOM exp() @@ -72,26 +72,26 @@ C 2000.06 04/15/01 Include IGRF_SUB subroutine for IK Te model C 2000.07 05/07/01 Include storm subroutine STORM and Ap access s/w C 2000.08 09/07/01 APF: if(j1.eq.j2) -> if(IY.eq.j2) [P. Wilkinson] C 2000.09 09/07/01 CONVER: LO2 = MOD(LO1,20)+1 [P. Webb,D. Pesnell] -C 2000.10 02/20/02 CONVER/DATA: 105.78 -> 015.78 [A. Shovkoplyas] +C 2000.10 02/20/02 CONVER/DATA: 105.78 -> 015.78 [A. Shovkoplyas] C 2000.11 10/28/02 replace TAB/6 blanks, enforce 72/line [D. Simpson] C 2000.12 11/08/02 removing unused variables (corr); apf0 removed C 2000.13 11/26/02 apf() using keyed access to ap.dat file; apf->apf1 -C 2000.14 11/27/02 changed F1_PROB; always 6 preceeding spaces +C 2000.14 11/27/02 changed F1_PROB; always 6 preceeding spaces C 2005.01 03/09/05 CALION,INVDPC,CALNE for new Ne, Ni models -C 2005.01 11/14/05 APF_ONLY for F107D; -C 2005.01 11/14/05 spreadf_brazil; added constraint 0<=P<=1 +C 2005.01 11/14/05 APF_ONLY for F107D; +C 2005.01 11/14/05 spreadf_brazil; added constraint 0<=P<=1 C 2005.02 05/11/06 NeQuick: XE1,TOPQ, M3000HM; stormvd, C 2005.02 03/27/07 STORM: hourly interpolation of Ap [A. Oinats] C 2007.00 05/18/07 Release of IRI-2007 C 2007.01 09/19/07 vdrift et al.: without *8 (no change in results) C 2007.04 02/07/09 IONLOW: N+ correction [V. Truhlik] -C 2007.05 03/30/09 NMDED: avoid exp underflow [K. Choi] +C 2007.05 03/30/09 NMDED: avoid exp underflow [K. Choi] C 2007.05 03/30/09 spreadf_brazil: bspl2f et al b(20->30) [Tab Ji] C 2007.05 03/30/09 APF_ONLY: Compute monthly F10.7 C 2007.06 05/26/09 APF_ONLY: replace i with 1 and IMN with ID [R.Conde] -C 2007.07 07/10/09 CONVER/DATA: 015.78 -> 005.78 [E. Araujo] -C 2007.08 07/23/09 STORM/CONVER: long. discont. [R. Conde, E. Araujo] -C 2007.08 07/23/09 APF,APF_ONLY: use YearBegin from ap.dat [R. Conde] +C 2007.07 07/10/09 CONVER/DATA: 015.78 -> 005.78 [E. Araujo] +C 2007.08 07/23/09 STORM/CONVER: long. discont. [R. Conde, E. Araujo] +C 2007.08 07/23/09 APF,APF_ONLY: use YearBegin from ap.dat [R. Conde] C 2007.10 02/03/10 APF: eof error message; clean-up APF and APF_only C 2007.11 04/19/10 ELTEIK: IF (ALT .GE. 900) THEN [A. Senior] C 2007.11 04/19/10 INILAY: HFFF,XFFF when NIGHT=F1REG=f [A. Senior] @@ -99,7 +99,7 @@ C C 2012.00 10/05/11 IRI-2012: bottomside B0 B1 model (SHAMDB0D, SHAB1D), C 2012.00 10/05/11 bottomside Ni model (iriflip.for), auroral foE C 2012.00 10/05/11 storm model (storme_ap), Te with PF10.7 (elteik), -C 2012.00 10/05/11 oval kp model (auroral_boundary),IGRF-11(igrf.for), +C 2012.00 10/05/11 oval kp model (auroral_boundary),IGRF-11(igrf.for), C 2012.00 10/05/11 NRLMSIS00 (cira.for), CGM coordinates, F10.7 daily C 2012.00 10/05/11 81-day 365-day indices (apf107.dat), ap->kp (ckp), C 2012.00 10/05/11 array size change jf(50) outf(20,1000), oarr(100). @@ -119,14 +119,14 @@ C 2012.05 08/25/14 ELTEIK,INVDPC,SOCO: ACOS: if(abs(x).gt.1) x=sign(1,x) C 2012.06 10/02/14 IONLOW,IONHIGH: C1(82) added for SPHARM_IK [J.C. Xue] C 2012.07 12/22/14 APFMSIS: changed text if out of range of APF107.DAT C 2012.08 04/27/15 TCON: ionoindx(806),indrz(806) -C 2012.09 07/12/15 add read_ig_rz, readapf107 change TCON,APF* +C 2012.09 07/12/15 add read_ig_rz, readapf107 change TCON,APF* C 2012.10 07/20/15 APFMSIS: remove duplicate iiap(8) [E. Blanch] C 2012.11 04/11/18 read_ig_rz: rz=rz_new*0.7 from 01/2014, ig_rz_10_2016 C 2012.12 04/16/18 Versioning now based on year of major releases C -C 2016.01 08/13/15 DATA in subr: DATA values only used first CALL -C 2016.01 08/13/15 COMMON/CONST/UMR,PI -C 2016.02 09/30/15 hmF2 new: SHAMDHMF2, SDMF2 and associated subroutines +C 2016.01 08/13/15 DATA in subr: DATA values only used first CALL +C 2016.01 08/13/15 COMMON/CONST/UMR,PI +C 2016.02 09/30/15 hmF2 new: SHAMDHMF2, SDMF2 and associated subroutines C 2016.02 09/30/15 ELTEIK,CALION,IONLOW,IONHIGH w/o invdip calc; INVDPC C 2016.03 10/12/15 READAPF107: F365 -> F107_365 [M. Hausman] C 2016.04 10/14/15 LEGFUN: replace print * with write(konsol,..) @@ -141,29 +141,29 @@ C 2016.08 07/19/16 XE3_1: change D1F1 to C1 [I. Galkin] C 2016.09 09/08/16 CALION: Version 2.5 C/NOFS correction [V. Truhlik] C 2016.09 09/08/16 NEW: model_hmF2 [V. Shubin] C 2016.10 10/19/16 read_ig_rz: *0.7 for r12_new starting 01/2014 -C 2016.11 02/23/17 SHAB1D: new SCHNEVPDB1 and COMMON/ATB1/ +C 2016.11 02/23/17 SHAB1D: new SCHNEVPDB1 and COMMON/ATB1/ C 2016.12 03/22/18 INVDPC= ... ALFA*SIGN(1.0,DIPL)*INVL [V. Truhlik] C 2016.12 03/22/18 INVDPC_OLD for ELTEIK [V. Truhlik] C 2016.13 04/06/18 read_data_SD: add web dir. location for mcsat%%.dat C 2016.14 04/23/18 Versioning now based on year of major releases C 2016.15 05/07/18 StormVd: AE7_12S -> AEd7_12S [K. Knight] -C 2020.01 07/02/19 Added subroutines BOOKER and tops_cor2 (COMMON/BLO11) +C 2020.01 07/02/19 Added subroutines BOOKER and tops_cor2 (COMMON/BLO11) C 2020.02 07/19/19 XE1:itopn=3 is topside cor2 option (solar activity term) -C 2020.03 08/05/19 XE1: corrections and BLO11 change -C +C 2020.03 08/05/19 XE1: corrections and BLO11 change +C c- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - c IRI functions and subroutines: C Ne: XE1,TOPQ,ZERO,DXE1N,XE2,XE3_1,XE4_1,XE5,XE6,XE_1 -C Te, Ti: ELTEIK{INTERP,KODERR,KOEFD,KOF107,LOCATE,SPHARM_IK, +C Te, Ti: ELTEIK{INTERP,KODERR,KOEFD,KOF107,LOCATE,SPHARM_IK, C SPLINE,SPLINT,SWAPEL,TEDIFI,TPCAS,TPCORR},TEBA,SPHARM, C ELTE,TEDE,TI,TN -C Ni: RPID,RDHHE,RDNO,KOEFP1,KOEFP2,KOEFP3,SUFE,IONDANI,IONCO1, +C Ni: RPID,RDHHE,RDNO,KOEFP1,KOEFP2,KOEFP3,SUFE,IONDANI,IONCO1, C IONCO2,APROK,CALION,IONLOW,IONHIGH,INVDPC C PEAKS: FOUT,XMOUT,HMF2ED,XM3000HM,SHAMDHMF2,SCHNEVPDH,model_hmF2, -C SDMF2,hmF2_med_SD,read_data_SD,fun_hmF2_SD,fun_Gk,Legendre, +C SDMF2,hmF2_med_SD,read_data_SD,fun_hmF2_SD,fun_Gk,Legendre, C fun_hmF2UT,Koeff_UT,fun_Akp_UT,fun_Fk_UT,fun_Gk_UT C FOF1ED,f1_c1,f1_prob,FOEEDI,XMDED,GAMMA1 -C PROFILE: TOPH05,CHEBISH,SHAMDB0D,SHAB1D,SCHNEVPD,TBFIT,LEGFUN, +C PROFILE: TOPH05,CHEBISH,SHAMDB0D,SHAB1D,SCHNEVPD,TBFIT,LEGFUN, C B0_98,TAL,VALGUL,DREGION C MAG. FIELD: FIELDG, CONVER(Geom. Corrected Latitude) C TIME: SOCO,HPOL,MODA,UT_LT,SUN @@ -177,32 +177,32 @@ C Auroral: auroral_boundary, ckp C Misc: REGFA1 c----------------------------------------------------------------------- C -C -C************************************************************* -C*************** ELECTRON DENSITY **************************** -C************************************************************* +C +C************************************************************* +C*************** ELECTRON DENSITY **************************** +C************************************************************* C - FUNCTION XE1(H) + FUNCTION XE1(H) c---------------------------------------------------------------- -C DETERMINING ELECTRON DENSITY(M-3) IN THE TOPSIDE IONOSPHERE -C (H=HMF2....2000 KM) BY HARMONIZED BENT-MODEL ADMITTING -C VARIABILITY OF THE GLOBAL PARAMETERS BETA,ETA,DELTA,ZETA WITH -C GEOM. LATITUDE, SMOOTHED SOLAR FLUX AND CRITICAL FREQUENCY. -C BETA,ETA,DELTA,ZETA are computed in IRISUB program and +C DETERMINING ELECTRON DENSITY(M-3) IN THE TOPSIDE IONOSPHERE +C (H=HMF2....2000 KM) BY HARMONIZED BENT-MODEL ADMITTING +C VARIABILITY OF THE GLOBAL PARAMETERS BETA,ETA,DELTA,ZETA WITH +C GEOM. LATITUDE, SMOOTHED SOLAR FLUX AND CRITICAL FREQUENCY. +C BETA,ETA,DELTA,ZETA are computed in IRISUB program and C communicated via COMMON /BLO10. This is the IRI-2001 approach -C [REF.:K.RAWER,S.RAMAKRISHNAN,1978] +C [REF.:K.RAWER,S.RAMAKRISHNAN,1978] C New options include: -C (1) IRI-corrected: TC3,alg10,hcor1 in COMMON /BLO11. +C (1) IRI-corrected: TC3,alg10,hcor1 in COMMON /BLO11. C TC3 correction term divided by (1500-(hcor1-hmF2)) C alg10 = alog(10.) C hcor1 lower height boundary for correction C (2) NeQuick: B2TOP in COMMON /BLO11. -C B2TOP is the topside scale height that depends on foF2 and -C hmF2. +C B2TOP is the topside scale height that depends on foF2 and +C hmF2. C Switch for choosing the desired option is itopn in COMMON /BLO11 C itopn =0 IRI-2001, =1 IRI-2001-corrected, =2 NeQuick -C =3 Gulyaeva-0.5 is not yet implemented. +C =3 Gulyaeva-0.5 is not yet implemented. c---------------------------------------------------------------- COMMON /BLOCK1/HMF2,XNMF2,HMF1,F1REG & /BLO10/BETA,ETA,DELTA,ZETA @@ -211,39 +211,39 @@ c & /BLO11/B2TOP,TC3,itopn,alg10,hcor1,tcor2 & /QTOP/Y05,H05TOP,QF,XNETOP,xm3000,hhalf,tau & /ARGEXP/ARGMAX - logical f1reg + logical f1reg IF(itopn.eq.2) THEN XE1=TOPQ(H,XNMF2,HMF2,B2TOP) RETURN ENDIF - + DXDH = (1000.-HMF2)/700. x0 = 300. - delta xmx0 = (H-HMF2)/DXDH x = xmx0 + x0 eptr1 = eptr(x,beta,394.5) - eptr(x0,beta,394.5) - eptr2 = eptr(x,100.,300.0) - eptr(x0,100.,300.0) + eptr2 = eptr(x,100.,300.0) - eptr(x0,100.,300.0) y = BETA * ETA * eptr1 + ZETA * (100. * eptr2 - xmx0) Y = y * dxdh if(abs(Y).gt.argmax) Y = sign(argmax,Y) c IF(itopn.eq.3) then c IF((QF.EQ.1.).AND.(ABS(H-H05TOP).LT.1.)) QF=Y05/Y -c XE1 = XNMF2 * EXP(-Y*QF) -c RETURN +c XE1 = XNMF2 * EXP(-Y*QF) +c RETURN c endif c TCORS = 0.0 -c IF(itopn.eq.1.or.itopn.eq.3) then +c IF(itopn.eq.1.or.itopn.eq.3) then c xred = h - hcor1 c rco = tc3 * xred c TCOR = rco * alg10 c endif c IF(h.gt.hcor1) TCORS=TCORS+TCOR c TCOR=TCOR+TCOR2 - XE1 = XNMF2 * EXP(-Y+TCOR) - RETURN - END + XE1 = XNMF2 * EXP(-Y+TCOR) + RETURN + END C C subroutine tops_cor2(xh,vmod,a01) @@ -281,13 +281,13 @@ C------------------------------------------------------------------------- DATA xmod/-90.,-60.,-25.,0.,25.,60.,90./ DATA thh/4*30.0/thhb/5*0.1/ - do 11 j2=1,3 - do 11 k=1,2 - do 11 l3=1,2 + do 11 j2=1,3 + do 11 k=1,2 + do 11 l3=1,2 do 12 i=1,6 AH(I)=HA(I,J2,K,L3) 12 AV(I)=PA(I,J2,K,L3) -11 AP01(J2,K,L3)=BOOKER(XH,6,AH,AV,THH) +11 AP01(J2,K,L3)=BOOKER(XH,6,AH,AV,THH) do 20 i=1,2 do 20 k=1,2 @@ -297,9 +297,9 @@ C------------------------------------------------------------------------- 21 pb(l+2,i,k)=ap01(l,i,k) 8i,*,*) 20 pb(5,i,k)=ap01(3,i,k) - do 14 k=1,2 + do 14 k=1,2 do 14 l4=1,2 - do 15 i=1,7 + do 15 i=1,7 15 BV(I)=PB(I,K,L4) 14 A01(K,L4)=BOOKER(VMOD,7,XMOD,BV,THHB) @@ -330,7 +330,7 @@ c---------------------------------------------------------------- RETURN END -C +C C REAL FUNCTION ZERO(DELTA) C FOR A PEAK AT X0 THE FUNCTION ZERO HAS TO BE EQUAL TO 0. @@ -358,23 +358,23 @@ C FOR A PEAK AT X0 THE FUNCTION ZERO HAS TO BE EQUAL TO 0. end C C - FUNCTION DXE1N(H) -C LOGARITHMIC DERIVATIVE OF FUNCTION XE1 (KM-1). + FUNCTION DXE1N(H) +C LOGARITHMIC DERIVATIVE OF FUNCTION XE1 (KM-1). COMMON /BLOCK1/HMF2,XNMF2,HMF1,F1REG - & /BLO10/BETA,ETA,DELTA,ZETA + & /BLO10/BETA,ETA,DELTA,ZETA logical f1reg x0 = 300. - delta X=(H-HMF2)/(1000.0-HMF2)*700.0 + x0 epst2 = epst(x,100.0,300.0) epst1 = epst(x,beta ,394.5) - DXE1N = - ETA * epst1 + ZETA * (1. - epst2) - RETURN - END + DXE1N = - ETA * epst1 + ZETA * (1. - epst2) + RETURN + END C C - REAL FUNCTION XE2(H) -C ELECTRON DENSITY FOR THE BOTTOMSIDE F-REGION (HMF1...HMF2). + REAL FUNCTION XE2(H) +C ELECTRON DENSITY FOR THE BOTTOMSIDE F-REGION (HMF1...HMF2). COMMON /BLOCK1/HMF2,XNMF2,HMF1,F1REG & /BLOCK2/B0,B1,C1 /ARGEXP/ARGMAX logical f1reg @@ -383,14 +383,14 @@ C ELECTRON DENSITY FOR THE BOTTOMSIDE F-REGION (HMF1...HMF2). if(x.le.0.0) x=0.0 z=x**b1 if(z.gt.argmax) z=argmax - XE2=XNMF2*EXP(-z)/COSH(X) - RETURN - END + XE2=XNMF2*EXP(-z)/COSH(X) + RETURN + END C C REAL FUNCTION XE3_1(H) C ELECTRON DENSITY FOR THE F1-LAYER (HZ.....HMF1) -C USING THE NEW DEFINED F1-LAYER FUNCTION (Reinisch and Huang, Advances +C USING THE NEW DEFINED F1-LAYER FUNCTION (Reinisch and Huang, Advances C in Space Research, Volume 25, Number 1, 81-88, 2000) COMMON /BLOCK1/ HMF2,XNMF2,HMF1,F1REG & /BLOCK2/ B0,B1,C1 @@ -423,42 +423,42 @@ C END C C - REAL FUNCTION XE5(H) -C ELECTRON DENSITY FOR THE E AND VALLEY REGION (HME..HEF). - LOGICAL NIGHT + REAL FUNCTION XE5(H) +C ELECTRON DENSITY FOR THE E AND VALLEY REGION (HME..HEF). + LOGICAL NIGHT COMMON /BLOCK4/ HME,XNME,HEF - & /BLOCK5/ NIGHT,E(4) - T3=H-HME - T1=T3*T3*(E(1)+T3*(E(2)+T3*(E(3)+T3*E(4)))) - IF(NIGHT) GOTO 100 - XE5=XNME*(1+T1) - RETURN -100 XE5=XNME*EXP(T1) - RETURN - END -C -C - REAL FUNCTION XE6(H) -C ELECTRON DENSITY FOR THE D REGION (HA...HME). + & /BLOCK5/ NIGHT,E(4) + T3=H-HME + T1=T3*T3*(E(1)+T3*(E(2)+T3*(E(3)+T3*E(4)))) + IF(NIGHT) GOTO 100 + XE5=XNME*(1+T1) + RETURN +100 XE5=XNME*EXP(T1) + RETURN + END +C +C + REAL FUNCTION XE6(H) +C ELECTRON DENSITY FOR THE D REGION (HA...HME). COMMON /BLOCK4/ HME,XNME,HEF & /BLOCK6/ HMD,XNMD,HDX - & /BLOCK7/ D1,XKK,FP30,FP3U,FP1,FP2 - IF(H.GT.HDX) GOTO 100 - Z=H-HMD - FP3=FP3U - IF(Z.GT.0.0) FP3=FP30 - XE6=XNMD*EXP(Z*(FP1+Z*(FP2+Z*FP3))) - RETURN -100 Z=HME-H + & /BLOCK7/ D1,XKK,FP30,FP3U,FP1,FP2 + IF(H.GT.HDX) GOTO 100 + Z=H-HMD + FP3=FP3U + IF(Z.GT.0.0) FP3=FP30 + XE6=XNMD*EXP(Z*(FP1+Z*(FP2+Z*FP3))) + RETURN +100 Z=HME-H XE6=XNME*EXP(-D1*Z**XKK) - RETURN - END + RETURN + END C C - REAL FUNCTION XE_1(H) -C ELECTRON DENSITY BEETWEEN HA(KM) AND 1000 KM -C SUMMARIZING PROCEDURES NE1....6; - COMMON /BLOCK1/HMF2,XNMF2,XHMF1,F1REG + REAL FUNCTION XE_1(H) +C ELECTRON DENSITY BEETWEEN HA(KM) AND 1000 KM +C SUMMARIZING PROCEDURES NE1....6; + COMMON /BLOCK1/HMF2,XNMF2,XHMF1,F1REG & /BLOCK3/HZ,T,HST & /BLOCK4/HME,XNME,HEF logical f1reg @@ -467,34 +467,34 @@ C SUMMARIZING PROCEDURES NE1....6; else hmf1=hmf2 endif - IF(H.LT.HMF2) GOTO 100 - XE_1=XE1(H) - RETURN + IF(H.LT.HMF2) GOTO 100 + XE_1=XE1(H) + RETURN -100 IF(H.LT.HMF1) GOTO 300 - XE_1=XE2(H) - RETURN +100 IF(H.LT.HMF1) GOTO 300 + XE_1=XE2(H) + RETURN -300 IF(H.LT.HZ) GOTO 400 - XE_1=XE3_1(H) - RETURN +300 IF(H.LT.HZ) GOTO 400 + XE_1=XE3_1(H) + RETURN -400 IF(H.LT.HEF) GOTO 500 - XE_1=XE4_1(H) - RETURN +400 IF(H.LT.HEF) GOTO 500 + XE_1=XE4_1(H) + RETURN -500 IF(H.LT.HME) GOTO 600 - XE_1=XE5(H) - RETURN +500 IF(H.LT.HME) GOTO 600 + XE_1=XE5(H) + RETURN -600 XE_1=XE6(H) - RETURN - END +600 XE_1=XE6(H) + RETURN + END +C C -C -C********************************************************** -C***************** ELECTRON TEMPERATURE ******************** -C********************************************************** +C********************************************************** +C***************** ELECTRON TEMPERATURE ******************** +C********************************************************** C SUBROUTINE ELTEIK(PF107Y,INVDIP,MLT,ALT,DDD,PF107,TE,SIGTE) c SUBROUTINE ELTEIK(CRD,PF107Y,INVDIP,FL,DIMO,B0, @@ -537,7 +537,7 @@ C 2.00 (IDL) F107 included as a linear perturbation on global Te patte C Te=Te(invlat,mlt,alt,season,F107) C 3.00 (IDL) invdipl introduced C 2000 (IDL,FORTRAN) correction for seasons included -C 2010 (IDL,FORTRAN) completely new version +C 2010 (IDL,FORTRAN) completely new version C Authors of the model (v 2011) C V. Truhlik, D. Bilitza, and L. Triskova C Author of the code: @@ -560,11 +560,11 @@ c INTEGER CRD,PF107Y,DDD,SEZDAY,XDAY REAL C(82) INTEGER SEZA,SEZB,DDDA,DDDB,DDDD REAL T350,T350A,T350B,T550,T550A,T550B,T850,T850A,T850B, - & T1400,T1400A,T1400B,T2000,T2000A,T2000B + & T1400,T1400A,T1400B,T2000,T2000A,T2000B REAL P350A,P350B,P550A,P550B,P850A,P850B, - & P1400A,P1400B,P2000A,P2000B + & P1400A,P1400B,P2000A,P2000B REAL E350,E350A,E350B,E550,E550A,E550B,E850,E850A,E850B, - & E1400,E1400A,E1400B,E2000,E2000A,E2000B + & E1400,E1400A,E1400B,E2000,E2000A,E2000B REAL TP350A,TP350B,TP550A,TP550B,TP850A,TP850B, & TP140A,TP140B,TP200A,TP200B INTEGER FUN @@ -651,7 +651,7 @@ C 21.12. - 20.3. ELSE DDDD=DDD+365 END IF - FUN=1 + FUN=1 END IF C model Te T350A=0.0 @@ -663,7 +663,7 @@ C model Te T1400A=0.0 T1400B=0.0 T2000A=0.0 - T2000B=0.0 + T2000B=0.0 DO 30 I=1,81 T350A=T350A+C(I)*D(1,SEZA,I) T350B=T350B+C(I)*D(1,SEZB,I) @@ -695,7 +695,7 @@ C model PF107 P1400A=0.0 P1400B=0.0 P2000A=0.0 - P2000B=0.0 + P2000B=0.0 DO 40 I=1,81 P350A=P350A+C(I)*DPF107(1,SEZA,I) P350B=P350B+C(I)*DPF107(1,SEZB,I) @@ -727,7 +727,7 @@ C model errTe E1400A=0.0 E1400B=0.0 E2000A=0.0 - E2000B=0.0 + E2000B=0.0 DO 50 I=1,81 E350A=E350A+C(I)*DERRTE(1,SEZA,I) E350B=E350B+C(I)*DERRTE(1,SEZB,I) @@ -748,14 +748,14 @@ C model errTe E1400A=10**E1400A E1400B=10**E1400B E2000A=10**E2000A - E2000B=10**E2000B + E2000B=10**E2000B C IF (PF107Y .EQ. 1) THEN CALL TPCORR(INVDP,MLT,DDD,PF107, & P350A,P350B,P550A,P550B,P850A,P850B, - & P1400A,P1400B,P2000A,P2000B, + & P1400A,P1400B,P2000A,P2000B, & TP350A,TP350B,TP550A,TP550B,TP850A,TP850B, - & TP140A,TP140B,TP200A,TP200B) + & TP140A,TP140B,TP200A,TP200B) T350A=T350A+TP350A T350B=T350B+TP350B T550A=T550A+TP550A @@ -766,7 +766,7 @@ C T1400B=T1400B+TP140B T2000A=T2000A+TP200A T2000B=T2000B+TP200B - END IF + END IF C Te IF (FUN .EQ. 0) THEN SEZDAY=(DDDB-DDDA) @@ -802,28 +802,28 @@ C error Te E850=(E850A-E850B)*COS(DPI/2.0*XDAY/SEZDAY)+E850B E1400=(E1400A-E1400B)*COS(DPI/2.0*XDAY/SEZDAY)+E1400B E2000=(E2000A-E2000B)*COS(DPI/2.0*XDAY/SEZDAY)+E2000B - END IF + END IF C //////////////////////////////////////////////////////// C Te linear interpolation for altitude IF (ALT .LT. 550) THEN TE=(T550-T350)/200.0*(ALT-350)+T350 - SIGTE=(E550-E350)/200.0*(ALT-350)+E350 + SIGTE=(E550-E350)/200.0*(ALT-350)+E350 END IF - IF ((ALT .GE. 550) .AND. (ALT .LT. 850)) THEN + IF ((ALT .GE. 550) .AND. (ALT .LT. 850)) THEN TE=(T850-T550)/300.0*(ALT-550)+T550 - SIGTE=(E850-E550)/300.0*(ALT-550)+E550 + SIGTE=(E850-E550)/300.0*(ALT-550)+E550 END IF - IF ((ALT .GE. 850) .AND. (ALT .LT. 1400)) THEN + IF ((ALT .GE. 850) .AND. (ALT .LT. 1400)) THEN TE=(T1400-T850)/550.0*(ALT-850)+T850 - SIGTE=(E1400-E850)/550.0*(ALT-850)+E850 + SIGTE=(E1400-E850)/550.0*(ALT-850)+E850 END IF - IF (ALT .GE. 1400) THEN + IF (ALT .GE. 1400) THEN TE=(T2000-T1400)/600.0*(ALT-1400)+T1400 - SIGTE=(E2000-E1400)/600.0*(ALT-1400)+E1400 - END IF - + SIGTE=(E2000-E1400)/600.0*(ALT-1400)+E1400 + END IF + INVDIP=INVDP - + RETURN END C @@ -834,33 +834,33 @@ C------------------------------------------------------------------------------- REAL V(N),X(N),XOUT,Y2(N),YOUT,X0(4),V0(4) REAL XA,XB,XC,VA,VB,VC CALL locate(X,N,XOUT,S) - IF (L .EQ. 0) THEN -C Spline interpolation (L=0) + IF (L .EQ. 0) THEN +C Spline interpolation (L=0) IF (S .LT. 2) S=2 - IF (S .GT. (N-2)) S=N-2 - S0=S-1 + IF (S .GT. (N-2)) S=N-2 + S0=S-1 DO 10 I=1,4 X0(I)=X(S0+I-1) 10 V0(I)=V(S0+I-1) - CALL SPLINE(X0,V0,4,1e30,1e30,Y2) + CALL SPLINE(X0,V0,4,1e30,1e30,Y2) CALL SPLINT(X0,V0,Y2,4,XOUT,YOUT) - END IF + END IF IF (L .EQ. 1) THEN -C Linear interpolation (L=1) +C Linear interpolation (L=1) IF ((S .GE.1) .AND. (S .LT. N)) THEN YOUT=(V(S+1)-V(S))/(X(S+1)-X(S))*(XOUT-X(S))+V(S) END IF - IF (S .EQ. 0) THEN + IF (S .EQ. 0) THEN YOUT=(V(2)-V(1))/(X(2)-X(1))*(XOUT-X(1))+V(1) END IF - IF (S .EQ. N) THEN + IF (S .EQ. N) THEN YOUT=(V(N)-V(N-1))/(X(N)-X(N-1))*(XOUT-X(N))+V(N) - END IF - END IF + END IF + END IF IF (L .EQ. 2) THEN -C Quadratic interpolation (L=2) +C Quadratic interpolation (L=2) IF (S .LT. 2) S=2 - IF (S .GT. (N-1)) S=N-1 + IF (S .GT. (N-1)) S=N-1 XA=X(S-1) XB=X(S) XC=X(S+1) @@ -869,8 +869,8 @@ C Quadratic interpolation (L=2) VC=V(S+1) YOUT=VA*(XOUT-XB)*(XOUT-XC)/((XA-XB)*(XA-XC))+ & VB*(XOUT-XA)*(XOUT-XC)/((XB-XA)*(XB-XC))+ - & VC*(XOUT-XA)*(XOUT-XB)/((XC-XA)*(XC-XB)) - END IF + & VC*(XOUT-XA)*(XOUT-XB)/((XC-XA)*(XC-XB)) + END IF INTERP=YOUT RETURN END @@ -1171,7 +1171,7 @@ C 2000km June solstice 10 DERRTE(5,3,I)=DERRTE(5,2,I)*MIRREQ(I) DO 40 K=1,81 DO 30 J=1,3 - DO 20 I=1,5 + DO 20 I=1,5 DOUT(I,J,K)=DERRTE(I,J,K) 20 CONTINUE 30 CONTINUE @@ -1476,7 +1476,7 @@ C 2000km June solstice 10 D(5,3,I)=D(5,2,I)*MIRREQ(I) DO 40 K=1,81 DO 30 J=1,3 - DO 20 I=1,5 + DO 20 I=1,5 DOUT(I,J,K)=D(I,J,K) 20 CONTINUE 30 CONTINUE @@ -1781,7 +1781,7 @@ C 2000km June solstice 10 DPF107(5,3,I)=DPF107(5,2,I)*MIRREQ(I) DO 40 K=1,81 DO 30 J=1,3 - DO 20 I=1,5 + DO 20 I=1,5 DOUT(I,J,K)=DPF107(I,J,K) 20 CONTINUE 30 CONTINUE @@ -1789,7 +1789,7 @@ C 2000km June solstice C//////////////////////////////////////////////////////////////////////////////////// RETURN END -C +C C SUBROUTINE locate(xx,n,x,j) C------------------------------------------------------------------------------------ @@ -1848,7 +1848,7 @@ C------------------------------------------------------------------------------- 20 CONTINUE RETURN END -C +C C SUBROUTINE spline(x,y,n,yp1,ypn,y2) C------------------------------------------------------------------------------------ @@ -1917,19 +1917,19 @@ C C------------------------------------------------------------------------------------ C swaps elements of array C------------------------------------------------------------------------------------ - INTEGER N,I + INTEGER N,I REAL A(N),AT(N) DO 10 I=1,N -10 AT(I)=A(I) +10 AT(I)=A(I) DO 20 I=0,N-1 -20 A(I+1)=AT(N-I) +20 A(I+1)=AT(N-I) RETURN END C C SUBROUTINE TEDIFI(F107IN,TEXN,TEDN,F107DF,TEDIF) C------------------------------------------------------------------------------------ -C interpolation for solar activity +C interpolation for solar activity C------------------------------------------------------------------------------------ REAL F107IN,TEXN,TEDN,F107DF(3),TEDIF REAL T0DNXN(3),T0DN(2),TDNXN(2) @@ -1939,17 +1939,17 @@ C------------------------------------------------------------------------------- T0DNXN(2)=TEDN T0DNXN(3)=TEXN TEDIF=INTERP(3,2,T0DNXN,F107DF,F107IN) - END IF + END IF IF (F107IN .LT. F107DF(1)) THEN T0DN(1)=0. T0DN(2)=TEDN - TEDIF=INTERP(2,1,T0DN,F107DF(1),F107IN) - END IF + TEDIF=INTERP(2,1,T0DN,F107DF(1),F107IN) + END IF IF (F107IN .GT. F107DF(3)) THEN TDNXN(1)=TEDN TDNXN(2)=TEXN - TEDIF=INTERP(2,1,TDNXN,F107DF(2),F107IN) - END IF + TEDIF=INTERP(2,1,TDNXN,F107DF(2),F107IN) + END IF RETURN END C @@ -1962,16 +1962,16 @@ C------------------------------------------------------------------------------- REAL MLTRAD,PF107,PF107M,XNDI,DNDI,PD(3),XNNI,DNNI,PN(3),TPASEA REAL TA,TM,TDC,TNC CALL TEDIFI(PF107,XNDI,DNDI,PD,TA) - CALL TEDIFI(PF107M,XNDI,DNDI,PD,TM) + CALL TEDIFI(PF107M,XNDI,DNDI,PD,TM) TDC=TA-TM TDC=AMAX1(TDC,-1250.) TDC=AMIN1(TDC,1250.) CALL TEDIFI(PF107,XNNI,DNNI,PN,TA) - CALL TEDIFI(PF107M,XNNI,DNNI,PN,TM) + CALL TEDIFI(PF107M,XNNI,DNNI,PN,TM) TNC=TA-TM TNC=AMAX1(TNC,-1250.) - TNC=AMIN1(TNC,1250.) -C harmonic interpolation for local time + TNC=AMIN1(TNC,1250.) +C harmonic interpolation for local time TPASEA=(1.-COS(MLTRAD))/2.*(TDC-TNC)+TNC RETURN END @@ -1980,47 +1980,47 @@ C C SUBROUTINE TPCORR(INVDIP,MLT,DDD,PF107, & P350A,P350B,P550A,P550B,P850A,P850B, - & P1400A,P1400B,P2000A,P2000B, + & P1400A,P1400B,P2000A,P2000B, & TP350A,TP350B,TP550A,TP550B,TP850A,TP850B, & TP140A,TP140B,TP200A,TP200B) C------------------------------------------------------------------------------------ REAL INVDIP,MLT,PF107 INTEGER DDD REAL P350A,P350B,P550A,P550B,P850A,P850B, - & P1400A,P1400B,P2000A,P2000B, + & P1400A,P1400B,P2000A,P2000B, & TP350A,TP350B,TP550A,TP550B,TP850A,TP850B, & TP140A,TP140B,TP200A,TP200B REAL INTERP REAL MLTRAD -C Constants +C Constants REAL INVDPQ(13) -C PF107 Day Equinox +C PF107 Day Equinox REAL P2DE(13,3),P1DE(13,3),P8DE(13,3),P5DE(13,3),P3DE(13,3) -C Te max-min dif Day Equinox +C Te max-min dif Day Equinox REAL CXN2DE(13),CXN1DE(13),CXN8DE(13),CXN5DE(13),CXN3DE(13) -C Te med-min dif Day Equinox +C Te med-min dif Day Equinox REAL CDN2DE(13),CDN1DE(13),CDN8DE(13),CDN5DE(13),CDN3DE(13) C -C PF107 Night Equinox +C PF107 Night Equinox REAL P2NE(13,3),P1NE(13,3),P8NE(13,3),P5NE(13,3),P3NE(13,3) -C Te max-min dif Night Equinox +C Te max-min dif Night Equinox REAL CXN2NE(13),CXN1NE(13),CXN8NE(13),CXN5NE(13),CXN3NE(13) -C Te med-min dif Night Equinox +C Te med-min dif Night Equinox REAL CDN2NE(13),CDN1NE(13),CDN8NE(13),CDN5NE(13),CDN3NE(13) -C C -C PF107 Day Solstice +C +C PF107 Day Solstice REAL P2DS(13,3),P1DS(13,3),P8DS(13,3),P5DS(13,3),P3DS(13,3) -C Te max-min dif Day Solstice +C Te max-min dif Day Solstice REAL CXN2DS(13),CXN1DS(13),CXN8DS(13),CXN5DS(13),CXN3DS(13) -C Te med-min dif Day Solstice +C Te med-min dif Day Solstice REAL CDN2DS(13),CDN1DS(13),CDN8DS(13),CDN5DS(13),CDN3DS(13) C -C PF107 Night Solstice +C PF107 Night Solstice REAL P2NS(13,3),P1NS(13,3),P8NS(13,3),P5NS(13,3),P3NS(13,3) -C Te max-min dif Night Solstice +C Te max-min dif Night Solstice REAL CXN2NS(13),CXN1NS(13),CXN8NS(13),CXN5NS(13),CXN3NS(13) -C Te med-min dif Night Solstice +C Te med-min dif Night Solstice REAL CDN2NS(13),CDN1NS(13),CDN8NS(13),CDN5NS(13),CDN3NS(13) C working variables REAL TXN2DE(13),TXN1DE(13),TXN8DE(13),TXN5DE(13),TXN3DE(13) @@ -2030,13 +2030,13 @@ C working variables REAL TXN2DS(13),TXN1DS(13),TXN8DS(13),TXN5DS(13),TXN3DS(13) REAL TDN2DS(13),TDN1DS(13),TDN8DS(13),TDN5DS(13),TDN3DS(13) REAL TXN2NS(13),TXN1NS(13),TXN8NS(13),TXN5NS(13),TXN3NS(13) - REAL TDN2NS(13),TDN1NS(13),TDN8NS(13),TDN5NS(13),TDN3NS(13) + REAL TDN2NS(13),TDN1NS(13),TDN8NS(13),TDN5NS(13),TDN3NS(13) C C Interpolated PF107 REAL P2DEI(3),P1DEI(3),P8DEI(3),P5DEI(3),P3DEI(3) REAL P2NEI(3),P1NEI(3),P8NEI(3),P5NEI(3),P3NEI(3) REAL P2DSI(3),P1DSI(3),P8DSI(3),P5DSI(3),P3DSI(3) - REAL P2NSI(3),P1NSI(3),P8NSI(3),P5NSI(3),P3NSI(3) + REAL P2NSI(3),P1NSI(3),P8NSI(3),P5NSI(3),P3NSI(3) C Additional local and temporary variables REAL XN2DEI,XN1DEI,XN8DEI,XN5DEI,XN3DEI REAL XN2NEI,XN1NEI,XN8NEI,XN5NEI,XN3NEI @@ -2047,7 +2047,7 @@ C Additional local and temporary variables REAL DN2DSI,DN1DSI,DN8DSI,DN5DSI,DN3DSI REAL DN2NSI,DN1NSI,DN8NSI,DN5NSI,DN3NSI REAL MLTTMP - INTEGER I + INTEGER I C DATA (INVDPQ(I),I=1,13) /-90.0,-75.0,-60.0,-45.0,-30.0,-15.0, & 0.0, 15.0, 30.0, 45.0, 60.0, 75.0,90.0/ @@ -2117,8 +2117,8 @@ C Equinox DATA (CXN2NE(I),I=1,13) / 76., 134., 192., 821., 801., & 583., 551., 583., 801., 821., 192., 134., 76./ C DATA (CDN2NE(I),I=1,13) / -19., -83., -148., 399., 289., -C & 340., 542., 340., 289., 399., -148., -83., -19./ -C equator corrected +C & 340., 542., 340., 289., 399., -148., -83., -19./ +C equator corrected DATA (CDN2NE(I),I=1,13) / -19., -83., -148., 399., 289., & 340., 340., 340., 289., 399., -148., -83., -19./ DATA ((P1NE(I,J),I=1,13),J=1,3) / @@ -2297,7 +2297,7 @@ C TXN5NE(I)=CXN5NE(I) TDN5NE(I)=CDN5NE(I) TXN3NE(I)=CXN3NE(I) - TDN3NE(I)=CDN3NE(I) + TDN3NE(I)=CDN3NE(I) TXN2DS(I)=CXN2DS(I) TDN2DS(I)=CDN2DS(I) TXN1DS(I)=CXN1DS(I) @@ -2317,9 +2317,9 @@ C TXN5NS(I)=CXN5NS(I) TDN5NS(I)=CDN5NS(I) TXN3NS(I)=CXN3NS(I) -5 TDN3NS(I)=CDN3NS(I) +5 TDN3NS(I)=CDN3NS(I) C - IF (((DDD .GE. 265) .AND. (DDD .LT. 354)) .OR. + IF (((DDD .GE. 265) .AND. (DDD .LT. 354)) .OR. & ((DDD .GE. 354) .OR. (DDD .LT. 79))) THEN CALL SWAPEL(13,TXN2DS) CALL SWAPEL(13,TDN2DS) @@ -2342,7 +2342,7 @@ C CALL SWAPEL(13,TXN3NS) CALL SWAPEL(13,TDN3NS) END IF - + C interpolated Te values for invdip C Te max-min day equinox XN2DEI=INTERP(13,0,TXN2DE,INVDPQ,INVDIP) @@ -2350,50 +2350,50 @@ C Te max-min day equinox XN8DEI=INTERP(13,0,TXN8DE,INVDPQ,INVDIP) XN5DEI=INTERP(13,0,TXN5DE,INVDPQ,INVDIP) XN3DEI=INTERP(13,0,TXN3DE,INVDPQ,INVDIP) -C Te max-min night equinox +C Te max-min night equinox XN2NEI=INTERP(13,0,TXN2NE,INVDPQ,INVDIP) XN1NEI=INTERP(13,0,TXN1NE,INVDPQ,INVDIP) XN8NEI=INTERP(13,0,TXN8NE,INVDPQ,INVDIP) XN5NEI=INTERP(13,0,TXN5NE,INVDPQ,INVDIP) XN3NEI=INTERP(13,0,TXN3NE,INVDPQ,INVDIP) -C Te med-min day equinox +C Te med-min day equinox DN2DEI=INTERP(13,0,TDN2DE,INVDPQ,INVDIP) DN1DEI=INTERP(13,0,TDN1DE,INVDPQ,INVDIP) DN8DEI=INTERP(13,0,TDN8DE,INVDPQ,INVDIP) DN5DEI=INTERP(13,0,TDN5DE,INVDPQ,INVDIP) DN3DEI=INTERP(13,0,TDN3DE,INVDPQ,INVDIP) -C Te med-min night equinox +C Te med-min night equinox DN2NEI=INTERP(13,0,TDN2NE,INVDPQ,INVDIP) DN1NEI=INTERP(13,0,TDN1NE,INVDPQ,INVDIP) DN8NEI=INTERP(13,0,TDN8NE,INVDPQ,INVDIP) DN5NEI=INTERP(13,0,TDN5NE,INVDPQ,INVDIP) DN3NEI=INTERP(13,0,TDN3NE,INVDPQ,INVDIP) -C -C Te max-min day solstice +C +C Te max-min day solstice XN2DSI=INTERP(13,0,TXN2DS,INVDPQ,INVDIP) XN1DSI=INTERP(13,0,TXN1DS,INVDPQ,INVDIP) XN8DSI=INTERP(13,0,TXN8DS,INVDPQ,INVDIP) XN5DSI=INTERP(13,0,TXN5DS,INVDPQ,INVDIP) XN3DSI=INTERP(13,0,TXN3DS,INVDPQ,INVDIP) -C Te max-min night solstice +C Te max-min night solstice XN2NSI=INTERP(13,0,TXN2NS,INVDPQ,INVDIP) XN1NSI=INTERP(13,0,TXN1NS,INVDPQ,INVDIP) XN8NSI=INTERP(13,0,TXN8NS,INVDPQ,INVDIP) XN5NSI=INTERP(13,0,TXN5NS,INVDPQ,INVDIP) XN3NSI=INTERP(13,0,TXN3NS,INVDPQ,INVDIP) -C Te med-min day solstice +C Te med-min day solstice DN2DSI=INTERP(13,0,TDN2DS,INVDPQ,INVDIP) DN1DSI=INTERP(13,0,TDN1DS,INVDPQ,INVDIP) DN8DSI=INTERP(13,0,TDN8DS,INVDPQ,INVDIP) DN5DSI=INTERP(13,0,TDN5DS,INVDPQ,INVDIP) DN3DSI=INTERP(13,0,TDN3DS,INVDPQ,INVDIP) -C Te med-min night solstice +C Te med-min night solstice DN2NSI=INTERP(13,0,TDN2NS,INVDPQ,INVDIP) DN1NSI=INTERP(13,0,TDN1NS,INVDPQ,INVDIP) DN8NSI=INTERP(13,0,TDN8NS,INVDPQ,INVDIP) DN5NSI=INTERP(13,0,TDN5NS,INVDPQ,INVDIP) DN3NSI=INTERP(13,0,TDN3NS,INVDPQ,INVDIP) - DO 10 I=1,3 + DO 10 I=1,3 P2DEI(I)=INTERP(13,1,P2DE(1,I),INVDPQ,INVDIP) P2NEI(I)=INTERP(13,1,P2NE(1,I),INVDPQ,INVDIP) P1DEI(I)=INTERP(13,1,P1DE(1,I),INVDPQ,INVDIP) @@ -2404,7 +2404,7 @@ C Te med-min night solstice P5NEI(I)=INTERP(13,1,P5NE(1,I),INVDPQ,INVDIP) P3DEI(I)=INTERP(13,1,P3DE(1,I),INVDPQ,INVDIP) P3NEI(I)=INTERP(13,1,P3NE(1,I),INVDPQ,INVDIP) - + P2DSI(I)=INTERP(13,1,P2DS(1,I),INVDPQ,INVDIP) P2NSI(I)=INTERP(13,1,P2NS(1,I),INVDPQ,INVDIP) P1DSI(I)=INTERP(13,1,P1DS(1,I),INVDPQ,INVDIP) @@ -2418,9 +2418,9 @@ C Te med-min night solstice MLTTMP=MLT-1 IF (MLTTMP .LT. 0) MLTTMP=MLTTMP+24.0 MLTRAD=MLTTMP/24.0*2*3.1415927 - IF (((DDD .GE. 79) .AND. (DDD .LT. 171)) .OR. + IF (((DDD .GE. 79) .AND. (DDD .LT. 171)) .OR. & ((DDD .GE. 265) .AND. (DDD .LT. 354))) THEN -C Equinox +C Equinox CALL TPCAS(MLTRAD,PF107,P2000A, & XN2DEI,DN2DEI,P2DEI,XN2NEI,DN2NEI,P2NEI,TP200A) CALL TPCAS(MLTRAD,PF107,P1400A, @@ -2431,7 +2431,7 @@ C Equinox & XN5DEI,DN5DEI,P5DEI,XN5NEI,DN5NEI,P5NEI,TP550A) CALL TPCAS(MLTRAD,PF107,P350A, & XN3DEI,DN3DEI,P3DEI,XN3NEI,DN3NEI,P3NEI,TP350A) -C Solstice +C Solstice CALL TPCAS(MLTRAD,PF107,P2000B, & XN2DSI,DN2DSI,P2DSI,XN2NSI,DN2NSI,P2NSI,TP200B) CALL TPCAS(MLTRAD,PF107,P1400B, @@ -2441,11 +2441,11 @@ C Solstice CALL TPCAS(MLTRAD,PF107,P550B, & XN5DSI,DN5DSI,P5DSI,XN5NSI,DN5NSI,P5NSI,TP550B) CALL TPCAS(MLTRAD,PF107,P350B, - & XN3DSI,DN3DSI,P3DSI,XN3NSI,DN3NSI,P3NSI,TP350B) + & XN3DSI,DN3DSI,P3DSI,XN3NSI,DN3NSI,P3NSI,TP350B) END IF - IF (((DDD .GE. 171) .AND. (DDD .LT. 265)) .OR. + IF (((DDD .GE. 171) .AND. (DDD .LT. 265)) .OR. & ((DDD .GE. 354) .OR. (DDD .LT. 79))) THEN -C Solstice +C Solstice CALL TPCAS(MLTRAD,PF107,P2000A, & XN2DSI,DN2DSI,P2DSI,XN2NSI,DN2NSI,P2NSI,TP200A) CALL TPCAS(MLTRAD,PF107,P1400A, @@ -2455,8 +2455,8 @@ C Solstice CALL TPCAS(MLTRAD,PF107,P550A, & XN5DSI,DN5DSI,P5DSI,XN5NSI,DN5NSI,P5NSI,TP550A) CALL TPCAS(MLTRAD,PF107,P350A, - & XN3DSI,DN3DSI,P3DSI,XN3NSI,DN3NSI,P3NSI,TP350A) -C Equinox + & XN3DSI,DN3DSI,P3DSI,XN3NSI,DN3NSI,P3NSI,TP350A) +C Equinox CALL TPCAS(MLTRAD,PF107,P2000B, & XN2DEI,DN2DEI,P2DEI,XN2NEI,DN2NEI,P2NEI,TP200B) CALL TPCAS(MLTRAD,PF107,P1400B, @@ -2466,129 +2466,129 @@ C Equinox CALL TPCAS(MLTRAD,PF107,P550B, & XN5DEI,DN5DEI,P5DEI,XN5NEI,DN5NEI,P5NEI,TP550B) CALL TPCAS(MLTRAD,PF107,P350B, - & XN3DEI,DN3DEI,P3DEI,XN3NEI,DN3NEI,P3NEI,TP350B) - END IF + & XN3DEI,DN3DEI,P3DEI,XN3NEI,DN3NEI,P3NEI,TP350B) + END IF RETURN END c c - SUBROUTINE TEBA(DIPL,SLT,NS,TE) + SUBROUTINE TEBA(DIPL,SLT,NS,TE) C CALCULATES ELECTRON TEMPERATURES TE(1) TO TE(4) AT ALTITUDES -C 300, 400, 1400 AND 3000 KM FOR DIP-LATITUDE DIPL/DEG AND +C 300, 400, 1400 AND 3000 KM FOR DIP-LATITUDE DIPL/DEG AND C LOCAL SOLAR TIME SLT/H USING THE BRACE-THEIS-MODELS (J. ATMOS. C TERR. PHYS. 43, 1317, 1981); NS IS SEASON IN NORTHERN C HEMISOHERE: IS=1 SPRING, IS=2 SUMMER .... C ALSO CALCULATED ARE THE TEMPERATURES AT 400 KM ALTITUDE FOR -C MIDNIGHT (TE(5)) AND NOON (TE(6)). +C MIDNIGHT (TE(5)) AND NOON (TE(6)). DIMENSION C(4,2,81),A(82),TE(6) COMMON /CONST/UMR,PI /const1/humr,dumr - DATA (C(1,1,J),J=1,81)/ - &.3100E1,-.3215E-2,.2440E+0,-.4613E-3,-.1711E-1,.2605E-1, - &-.9546E-1,.1794E-1,.1270E-1,.2791E-1,.1536E-1,-.6629E-2, - &-.3616E-2,.1229E-1,.4147E-3,.1447E-2,-.4453E-3,-.1853, - &-.1245E-1,-.3675E-1,.4965E-2,.5460E-2,.8117E-2,-.1002E-1, - &.5466E-3,-.3087E-1,-.3435E-2,-.1107E-3,.2199E-2,.4115E-3, - &.6061E-3,.2916E-3,-.6584E-1,.4729E-2,-.1523E-2,.6689E-3, - &.1031E-2,.5398E-3,-.1924E-2,-.4565E-1,.7244E-2,-.8543E-4, - &.1052E-2,-.6696E-3,-.7492E-3,.4405E-1,.3047E-2,.2858E-2, - &-.1465E-3,.1195E-2,-.1024E-3,.4582E-1,.8749E-3,.3011E-3, - &.4473E-3,-.2782E-3,.4911E-1,-.1016E-1,.27E-2,-.9304E-3, - &-.1202E-2,.2210E-1,.2566E-2,-.122E-3,.3987E-3,-.5744E-1, - &.4408E-2,-.3497E-2,.83E-3,-.3536E-1,-.8813E-2,.2423E-2, - &-.2994E-1,-.1929E-2,-.5268E-3,-.2228E-1,.3385E-2, - &.413E-1,.4876E-2,.2692E-1,.1684E-2/ - DATA (C(1,2,J),J=1,81)/.313654E1,.6796E-2,.181413,.8564E-1, - &-.32856E-1,-.3508E-2,-.1438E-1,-.2454E-1,.2745E-2,.5284E-1, - &.1136E-1,-.1956E-1,-.5805E-2,.2801E-2,-.1211E-2,.4127E-2, - &.2909E-2,-.25751,-.37915E-2,-.136E-1,-.13225E-1,.1202E-1, - &.1256E-1,-.12165E-1,.1326E-1,-.7123E-1,.5793E-3,.1537E-2, - &.6914E-2,-.4173E-2,.1052E-3,-.5765E-3,-.4041E-1,-.1752E-2, - &-.542E-2,-.684E-2,.8921E-3,-.2228E-2,.1428E-2,.6635E-2,-.48045E-2, - &-.1659E-2,-.9341E-3,.223E-3,-.9995E-3,.4285E-1,-.5211E-3, - &-.3293E-2,.179E-2,.6435E-3,-.1891E-3,.3844E-1,.359E-2,-.8139E-3, - &-.1996E-2,.2398E-3,.2938E-1,.761E-2,.347655E-2,.1707E-2,.2769E-3, - &-.157E-1,.983E-3,-.6532E-3,.929E-4,-.2506E-1,.4681E-2,.1461E-2, - &-.3757E-5,-.9728E-2,.2315E-2,.6377E-3,-.1705E-1,.2767E-2, - &-.6992E-3,-.115E-1,-.1644E-2,.3355E-2,-.4326E-2,.2035E-1,.2985E-1/ - DATA (C(2,1,J),J=1,81)/.3136E1,.6498E-2,.2289,.1859E-1,-.3328E-1, - &-.4889E-2,-.3054E-1,-.1773E-1,-.1728E-1,.6555E-1,.1775E-1, - &-.2488E-1,-.9498E-2,.1493E-1,.281E-2,.2406E-2,.5436E-2,-.2115, - &.7007E-2,-.5129E-1,-.7327E-2,.2402E-1,.4772E-2,-.7374E-2, - &-.3835E-3,-.5013E-1,.2866E-2,.2216E-2,.2412E-3,.2094E-2,.122E-2 - &,-.1703E-3,-.1082,-.4992E-2,-.4065E-2,.3615E-2,-.2738E-2, - &-.7177E-3,.2173E-3,-.4373E-1,-.375E-2,.5507E-2,-.1567E-2, - &-.1458E-2,-.7397E-3,.7903E-1,.4131E-2,.3714E-2,.1073E-2, - &-.8991E-3,.2976E-3,.2623E-1,.2344E-2,.5608E-3,.4124E-3,.1509E-3, - &.5103E-1,.345E-2,.1283E-2,.7238E-3,-.3464E-4,.1663E-1,-.1644E-2, - &-.71E-3,.5281E-3,-.2729E-1,.3556E-2,-.3391E-2,-.1787E-3,.2154E-2, - &.6476E-2,-.8282E-3,-.2361E-1,.9557E-3,.3205E-3,-.2301E-1, - &-.854E-3,-.1126E-1,-.2323E-2,-.8582E-2,.2683E-1/ - DATA (C(2,2,J),J=1,81)/.3144E1,.8571E-2,.2539,.6937E-1,-.1667E-1, - &.2249E-1,-.4162E-1,.1201E-1,.2435E-1,.5232E-1,.2521E-1,-.199E-1, - &-.7671E-2,.1264E-1,-.1551E-2,-.1928E-2,.3652E-2,-.2019,.5697E-2, - &-.3159E-1,-.1451E-1,.2868E-1,.1377E-1,-.4383E-2,.1172E-1, - &-.5683E-1,.3593E-2,.3571E-2,.3282E-2,.1732E-2,-.4921E-3,-.1165E-2 - &,-.1066,-.1892E-1,.357E-2,-.8631E-3,-.1876E-2,-.8414E-4,.2356E-2, - &-.4259E-1,-.322E-2,.4641E-2,.6223E-3,-.168E-2,-.1243E-3,.7393E-1, - &-.3143E-2,-.2362E-2,.1235E-2,-.1551E-2,.2099E-3,.2299E-1,.5301E-2 - &,-.4306E-2,-.1303E-2,.7687E-5,.5305E-1,.6642E-2,-.1686E-2, - &.1048E-2,.5958E-3,.4341E-1,-.8819E-4,-.333E-3,-.2158E-3,-.4106E-1 - &,.4191E-2,.2045E-2,-.1437E-3,-.1803E-1,-.8072E-3,-.424E-3, - &-.26E-1,-.2329E-2,.5949E-3,-.1371E-1,-.2188E-2,.1788E-1, - &.6405E-3,.5977E-2,.1333E-1/ - DATA (C(3,1,J),J=1,81)/.3372E1,.1006E-1,.1436,.2023E-2,-.5166E-1, - &.9606E-2,-.5596E-1,.4914E-3,-.3124E-2,-.4713E-1,-.7371E-2, - &-.4823E-2,-.2213E-2,.6569E-2,-.1962E-3,.3309E-3,-.3908E-3, - &-.2836,.7829E-2,.1175E-1,.9919E-3,.6589E-2,.2045E-2,-.7346E-2 - &,-.89E-3,-.347E-1,-.4977E-2,.147E-2,-.2823E-5,.6465E-3, - &-.1448E-3,.1401E-2,-.8988E-1,-.3293E-4,-.1848E-2,.4439E-3, - &-.1263E-2,.317E-3,-.6227E-3,.1721E-1,-.199E-2,-.4627E-3, - &.2897E-5,-.5454E-3,.3385E-3,.8432E-1,-.1951E-2,.1487E-2, - &.1042E-2,-.4788E-3,-.1276E-3,.2373E-1,.2409E-2,.5263E-3, - &.1301E-2,-.4177E-3,.3974E-1,.1418E-3,-.1048E-2,-.2982E-3, - &-.3396E-4,.131E-1,.1413E-2,-.1373E-3,.2638E-3,-.4171E-1, - &-.5932E-3,-.7523E-3,-.6883E-3,-.2355E-1,.5695E-3,-.2219E-4, - &-.2301E-1,-.9962E-4,-.6761E-3,.204E-2,-.5479E-3,.2591E-1, - &-.2425E-2,.1583E-1,.9577E-2/ - DATA (C(3,2,J),J=1,81)/.3367E1,.1038E-1,.1407,.3622E-1,-.3144E-1, - &.112E-1,-.5674E-1,.3219E-1,.1288E-2,-.5799E-1,-.4609E-2, - &.3252E-2,-.2859E-3,.1226E-1,-.4539E-2,.1310E-2,-.5603E-3, - &-.311,-.1268E-2,.1539E-1,.3146E-2,.7787E-2,-.143E-2,-.482E-2 - &,.2924E-2,-.9981E-1,-.7838E-2,-.1663E-3,.4769E-3,.4148E-2, - &-.1008E-2,-.979E-3,-.9049E-1,-.2994E-2,-.6748E-2,-.9889E-3, - &.1488E-2,-.1154E-2,-.8412E-4,-.1302E-1,-.4859E-2,-.7172E-3, - &-.9401E-3,.9101E-3,-.1735E-3,.7055E-1,.6398E-2,-.3103E-2, - &-.938E-3,-.4E-3,-.1165E-2,.2713E-1,-.1654E-2,.2781E-2, - &-.5215E-5,.2258E-3,.5022E-1,.95E-2,.4147E-3,.3499E-3, - &-.6097E-3,.4118E-1,.6556E-2,.3793E-2,-.1226E-3,-.2517E-1, - &.1491E-3,.1075E-2,.4531E-3,-.9012E-2,.3343E-2,.3431E-2, - &-.2519E-1,.3793E-4,.5973E-3,-.1423E-1,-.132E-2,-.6048E-2, - &-.5005E-2,-.115E-1,.2574E-1/ - DATA (C(4,1,J),J=1,81)/.3574E1,.0,.7537E-1,.0,-.8459E-1, - &0.,-.294E-1,0.,.4547E-1,-.5321E-1,0.,.4328E-2,0.,.6022E-2, - &.0,-.9168E-3,.0,-.1768,.0,.294E-1,.0,.5902E-3,.0,-.9047E-2, - &.0,-.6555E-1,.0,-.1033E-2,.0,.1674E-2,.0,.2802E-3,-.6786E-1 - &,.0,.4193E-2,.0,-.6448E-3,.0,.9277E-3,-.1634E-1,.0,-.2531E-2 - &,.0,.193E-4,.0,.528E-1,.0,.2438E-2,.0,-.5292E-3,.0,.1555E-1 - &,.0,-.3259E-2,.0,-.5998E-3,.3168E-1,.0,.2382E-2,.0,-.4078E-3 - &,.2312E-1,.0,.1481E-3,.0,-.1885E-1,.0,.1144E-2,.0,-.9952E-2 - &,.0,-.551E-3,-.202E-1,.0,-.7283E-4,-.1272E-1,.0,.2224E-2, - &.0,-.251E-2,.2434E-1/ - DATA (C(4,2,J),J=1,81)/.3574E1,-.5639E-2,.7094E-1, - &-.3347E-1,-.861E-1,-.2877E-1,-.3154E-1,-.2847E-2,.1235E-1, - &-.5966E-1,-.3236E-2,.3795E-3,-.8634E-3,.3377E-2,-.1071E-3, - &-.2151E-2,-.4057E-3,-.1783,.126E-1,.2835E-1,-.242E-2, - &.3002E-2,-.4684E-2,-.6756E-2,-.7493E-3,-.6147E-1,-.5636E-2 - &,-.1234E-2,-.1613E-2,-.6353E-4,-.2503E-3,-.1729E-3,-.7148E-1 - &,.5326E-2,.4006E-2,.6484E-3,-.1046E-3,-.6034E-3,-.9435E-3, - &-.2385E-2,.6853E-2,.151E-2,.1319E-2,.9049E-4,-.1999E-3, - &.3976E-1,.2802E-2,-.103E-2,.5599E-3,-.4791E-3,-.846E-4, - &.2683E-1,.427E-2,.5911E-3,.2987E-3,-.208E-3,.1396E-1, - &-.1922E-2,-.1063E-2,.3803E-3,.1343E-3,.1771E-1,-.1038E-2, - &-.4645E-3,-.2481E-3,-.2251E-1,-.29E-2,-.3977E-3,-.516E-3, - &-.8079E-2,-.1528E-2,.306E-3,-.1582E-1,-.8536E-3,.1565E-3, - &-.1252E-1,.2319E-3,.4311E-2,.1024E-2,.1296E-5,.179E-1/ - + DATA (C(1,1,J),J=1,81)/ + &.3100E1,-.3215E-2,.2440E+0,-.4613E-3,-.1711E-1,.2605E-1, + &-.9546E-1,.1794E-1,.1270E-1,.2791E-1,.1536E-1,-.6629E-2, + &-.3616E-2,.1229E-1,.4147E-3,.1447E-2,-.4453E-3,-.1853, + &-.1245E-1,-.3675E-1,.4965E-2,.5460E-2,.8117E-2,-.1002E-1, + &.5466E-3,-.3087E-1,-.3435E-2,-.1107E-3,.2199E-2,.4115E-3, + &.6061E-3,.2916E-3,-.6584E-1,.4729E-2,-.1523E-2,.6689E-3, + &.1031E-2,.5398E-3,-.1924E-2,-.4565E-1,.7244E-2,-.8543E-4, + &.1052E-2,-.6696E-3,-.7492E-3,.4405E-1,.3047E-2,.2858E-2, + &-.1465E-3,.1195E-2,-.1024E-3,.4582E-1,.8749E-3,.3011E-3, + &.4473E-3,-.2782E-3,.4911E-1,-.1016E-1,.27E-2,-.9304E-3, + &-.1202E-2,.2210E-1,.2566E-2,-.122E-3,.3987E-3,-.5744E-1, + &.4408E-2,-.3497E-2,.83E-3,-.3536E-1,-.8813E-2,.2423E-2, + &-.2994E-1,-.1929E-2,-.5268E-3,-.2228E-1,.3385E-2, + &.413E-1,.4876E-2,.2692E-1,.1684E-2/ + DATA (C(1,2,J),J=1,81)/.313654E1,.6796E-2,.181413,.8564E-1, + &-.32856E-1,-.3508E-2,-.1438E-1,-.2454E-1,.2745E-2,.5284E-1, + &.1136E-1,-.1956E-1,-.5805E-2,.2801E-2,-.1211E-2,.4127E-2, + &.2909E-2,-.25751,-.37915E-2,-.136E-1,-.13225E-1,.1202E-1, + &.1256E-1,-.12165E-1,.1326E-1,-.7123E-1,.5793E-3,.1537E-2, + &.6914E-2,-.4173E-2,.1052E-3,-.5765E-3,-.4041E-1,-.1752E-2, + &-.542E-2,-.684E-2,.8921E-3,-.2228E-2,.1428E-2,.6635E-2,-.48045E-2, + &-.1659E-2,-.9341E-3,.223E-3,-.9995E-3,.4285E-1,-.5211E-3, + &-.3293E-2,.179E-2,.6435E-3,-.1891E-3,.3844E-1,.359E-2,-.8139E-3, + &-.1996E-2,.2398E-3,.2938E-1,.761E-2,.347655E-2,.1707E-2,.2769E-3, + &-.157E-1,.983E-3,-.6532E-3,.929E-4,-.2506E-1,.4681E-2,.1461E-2, + &-.3757E-5,-.9728E-2,.2315E-2,.6377E-3,-.1705E-1,.2767E-2, + &-.6992E-3,-.115E-1,-.1644E-2,.3355E-2,-.4326E-2,.2035E-1,.2985E-1/ + DATA (C(2,1,J),J=1,81)/.3136E1,.6498E-2,.2289,.1859E-1,-.3328E-1, + &-.4889E-2,-.3054E-1,-.1773E-1,-.1728E-1,.6555E-1,.1775E-1, + &-.2488E-1,-.9498E-2,.1493E-1,.281E-2,.2406E-2,.5436E-2,-.2115, + &.7007E-2,-.5129E-1,-.7327E-2,.2402E-1,.4772E-2,-.7374E-2, + &-.3835E-3,-.5013E-1,.2866E-2,.2216E-2,.2412E-3,.2094E-2,.122E-2 + &,-.1703E-3,-.1082,-.4992E-2,-.4065E-2,.3615E-2,-.2738E-2, + &-.7177E-3,.2173E-3,-.4373E-1,-.375E-2,.5507E-2,-.1567E-2, + &-.1458E-2,-.7397E-3,.7903E-1,.4131E-2,.3714E-2,.1073E-2, + &-.8991E-3,.2976E-3,.2623E-1,.2344E-2,.5608E-3,.4124E-3,.1509E-3, + &.5103E-1,.345E-2,.1283E-2,.7238E-3,-.3464E-4,.1663E-1,-.1644E-2, + &-.71E-3,.5281E-3,-.2729E-1,.3556E-2,-.3391E-2,-.1787E-3,.2154E-2, + &.6476E-2,-.8282E-3,-.2361E-1,.9557E-3,.3205E-3,-.2301E-1, + &-.854E-3,-.1126E-1,-.2323E-2,-.8582E-2,.2683E-1/ + DATA (C(2,2,J),J=1,81)/.3144E1,.8571E-2,.2539,.6937E-1,-.1667E-1, + &.2249E-1,-.4162E-1,.1201E-1,.2435E-1,.5232E-1,.2521E-1,-.199E-1, + &-.7671E-2,.1264E-1,-.1551E-2,-.1928E-2,.3652E-2,-.2019,.5697E-2, + &-.3159E-1,-.1451E-1,.2868E-1,.1377E-1,-.4383E-2,.1172E-1, + &-.5683E-1,.3593E-2,.3571E-2,.3282E-2,.1732E-2,-.4921E-3,-.1165E-2 + &,-.1066,-.1892E-1,.357E-2,-.8631E-3,-.1876E-2,-.8414E-4,.2356E-2, + &-.4259E-1,-.322E-2,.4641E-2,.6223E-3,-.168E-2,-.1243E-3,.7393E-1, + &-.3143E-2,-.2362E-2,.1235E-2,-.1551E-2,.2099E-3,.2299E-1,.5301E-2 + &,-.4306E-2,-.1303E-2,.7687E-5,.5305E-1,.6642E-2,-.1686E-2, + &.1048E-2,.5958E-3,.4341E-1,-.8819E-4,-.333E-3,-.2158E-3,-.4106E-1 + &,.4191E-2,.2045E-2,-.1437E-3,-.1803E-1,-.8072E-3,-.424E-3, + &-.26E-1,-.2329E-2,.5949E-3,-.1371E-1,-.2188E-2,.1788E-1, + &.6405E-3,.5977E-2,.1333E-1/ + DATA (C(3,1,J),J=1,81)/.3372E1,.1006E-1,.1436,.2023E-2,-.5166E-1, + &.9606E-2,-.5596E-1,.4914E-3,-.3124E-2,-.4713E-1,-.7371E-2, + &-.4823E-2,-.2213E-2,.6569E-2,-.1962E-3,.3309E-3,-.3908E-3, + &-.2836,.7829E-2,.1175E-1,.9919E-3,.6589E-2,.2045E-2,-.7346E-2 + &,-.89E-3,-.347E-1,-.4977E-2,.147E-2,-.2823E-5,.6465E-3, + &-.1448E-3,.1401E-2,-.8988E-1,-.3293E-4,-.1848E-2,.4439E-3, + &-.1263E-2,.317E-3,-.6227E-3,.1721E-1,-.199E-2,-.4627E-3, + &.2897E-5,-.5454E-3,.3385E-3,.8432E-1,-.1951E-2,.1487E-2, + &.1042E-2,-.4788E-3,-.1276E-3,.2373E-1,.2409E-2,.5263E-3, + &.1301E-2,-.4177E-3,.3974E-1,.1418E-3,-.1048E-2,-.2982E-3, + &-.3396E-4,.131E-1,.1413E-2,-.1373E-3,.2638E-3,-.4171E-1, + &-.5932E-3,-.7523E-3,-.6883E-3,-.2355E-1,.5695E-3,-.2219E-4, + &-.2301E-1,-.9962E-4,-.6761E-3,.204E-2,-.5479E-3,.2591E-1, + &-.2425E-2,.1583E-1,.9577E-2/ + DATA (C(3,2,J),J=1,81)/.3367E1,.1038E-1,.1407,.3622E-1,-.3144E-1, + &.112E-1,-.5674E-1,.3219E-1,.1288E-2,-.5799E-1,-.4609E-2, + &.3252E-2,-.2859E-3,.1226E-1,-.4539E-2,.1310E-2,-.5603E-3, + &-.311,-.1268E-2,.1539E-1,.3146E-2,.7787E-2,-.143E-2,-.482E-2 + &,.2924E-2,-.9981E-1,-.7838E-2,-.1663E-3,.4769E-3,.4148E-2, + &-.1008E-2,-.979E-3,-.9049E-1,-.2994E-2,-.6748E-2,-.9889E-3, + &.1488E-2,-.1154E-2,-.8412E-4,-.1302E-1,-.4859E-2,-.7172E-3, + &-.9401E-3,.9101E-3,-.1735E-3,.7055E-1,.6398E-2,-.3103E-2, + &-.938E-3,-.4E-3,-.1165E-2,.2713E-1,-.1654E-2,.2781E-2, + &-.5215E-5,.2258E-3,.5022E-1,.95E-2,.4147E-3,.3499E-3, + &-.6097E-3,.4118E-1,.6556E-2,.3793E-2,-.1226E-3,-.2517E-1, + &.1491E-3,.1075E-2,.4531E-3,-.9012E-2,.3343E-2,.3431E-2, + &-.2519E-1,.3793E-4,.5973E-3,-.1423E-1,-.132E-2,-.6048E-2, + &-.5005E-2,-.115E-1,.2574E-1/ + DATA (C(4,1,J),J=1,81)/.3574E1,.0,.7537E-1,.0,-.8459E-1, + &0.,-.294E-1,0.,.4547E-1,-.5321E-1,0.,.4328E-2,0.,.6022E-2, + &.0,-.9168E-3,.0,-.1768,.0,.294E-1,.0,.5902E-3,.0,-.9047E-2, + &.0,-.6555E-1,.0,-.1033E-2,.0,.1674E-2,.0,.2802E-3,-.6786E-1 + &,.0,.4193E-2,.0,-.6448E-3,.0,.9277E-3,-.1634E-1,.0,-.2531E-2 + &,.0,.193E-4,.0,.528E-1,.0,.2438E-2,.0,-.5292E-3,.0,.1555E-1 + &,.0,-.3259E-2,.0,-.5998E-3,.3168E-1,.0,.2382E-2,.0,-.4078E-3 + &,.2312E-1,.0,.1481E-3,.0,-.1885E-1,.0,.1144E-2,.0,-.9952E-2 + &,.0,-.551E-3,-.202E-1,.0,-.7283E-4,-.1272E-1,.0,.2224E-2, + &.0,-.251E-2,.2434E-1/ + DATA (C(4,2,J),J=1,81)/.3574E1,-.5639E-2,.7094E-1, + &-.3347E-1,-.861E-1,-.2877E-1,-.3154E-1,-.2847E-2,.1235E-1, + &-.5966E-1,-.3236E-2,.3795E-3,-.8634E-3,.3377E-2,-.1071E-3, + &-.2151E-2,-.4057E-3,-.1783,.126E-1,.2835E-1,-.242E-2, + &.3002E-2,-.4684E-2,-.6756E-2,-.7493E-3,-.6147E-1,-.5636E-2 + &,-.1234E-2,-.1613E-2,-.6353E-4,-.2503E-3,-.1729E-3,-.7148E-1 + &,.5326E-2,.4006E-2,.6484E-3,-.1046E-3,-.6034E-3,-.9435E-3, + &-.2385E-2,.6853E-2,.151E-2,.1319E-2,.9049E-4,-.1999E-3, + &.3976E-1,.2802E-2,-.103E-2,.5599E-3,-.4791E-3,-.846E-4, + &.2683E-1,.427E-2,.5911E-3,.2987E-3,-.208E-3,.1396E-1, + &-.1922E-2,-.1063E-2,.3803E-3,.1343E-3,.1771E-1,-.1038E-2, + &-.4645E-3,-.2481E-3,-.2251E-1,-.29E-2,-.3977E-3,-.516E-3, + &-.8079E-2,-.1528E-2,.306E-3,-.1582E-1,-.8536E-3,.1565E-3, + &-.1252E-1,.2319E-3,.4311E-2,.1024E-2,.1296E-5,.179E-1/ + IF(NS.LT.3) THEN IS=NS ELSE IF(NS.GT.3) THEN @@ -2597,158 +2597,158 @@ C MIDNIGHT (TE(5)) AND NOON (TE(6)). ELSE IS=1 ENDIF - COLAT=UMR*(90.-DIPL) - AZ=humr*SLT + COLAT=UMR*(90.-DIPL) + AZ=humr*SLT CALL SPHARM(A,8,8,COLAT,AZ) IF(IS.EQ.2) THEN KEND=3 ELSE KEND=4 - ENDIF - DO 2 K=1,KEND - STE=0. - DO 1 I=1,81 -1 STE=STE+A(I)*C(K,IS,I) + ENDIF + DO 2 K=1,KEND + STE=0. + DO 1 I=1,81 +1 STE=STE+A(I)*C(K,IS,I) 2 TE(K)=10.**STE IF(IS.EQ.2) THEN DIPL=-DIPL - COLAT=UMR*(90.-DIPL) + COLAT=UMR*(90.-DIPL) CALL SPHARM(A,8,8,COLAT,AZ) - STE=0. - DO 11 I=1,81 -11 STE=STE+A(I)*C(4,2,I) + STE=0. + DO 11 I=1,81 +11 STE=STE+A(I)*C(4,2,I) TE(4)=10.**STE ENDIF C---------- TEMPERATURE AT 400KM AT MIDNIGHT AND NOON - DO 4 J=1,2 - STE=0. - AZ=humr*(J-1)*12. - CALL SPHARM(A,8,8,COLAT,AZ) - DO 3 I=1,81 -3 STE=STE+A(I)*C(2,IS,I) -4 TE(J+4)=10.**STE - RETURN - END -C -C - SUBROUTINE SPHARM(C,L,M,COLAT,AZ) -C CALCULATES THE COEFFICIENTS OF THE SPHERICAL HARMONIC -C EXPANSION THAT WAS USED FOR THE BRACE-THEIS-MODELS. - DIMENSION C(82) - C(1)=1. - K=2 - X=COS(COLAT) - C(K)=X - K=K+1 - DO 10 I=2,L - C(K)=((2*I-1)*X*C(K-1)-(I-1)*C(K-2))/I -10 K=K+1 - Y=SIN(COLAT) - DO 20 MT=1,M - CAZ=COS(MT*AZ) - SAZ=SIN(MT*AZ) - C(K)=Y**MT - K=K+1 - IF(MT.EQ.L) GOTO 16 - C(K)=C(K-1)*X*(2*MT+1) - K=K+1 - IF((MT+1).EQ.L) GOTO 16 - DO 15 I=2+MT,L - C(K)=((2*I-1)*X*C(K-1)-(I+MT-1)*C(K-2))/(I-MT) -15 K=K+1 -16 N=L-MT+1 - DO 18 I=1,N - C(K)=C(K-N)*CAZ - C(K-N)=C(K-N)*SAZ -18 K=K+1 -20 CONTINUE - RETURN - END + DO 4 J=1,2 + STE=0. + AZ=humr*(J-1)*12. + CALL SPHARM(A,8,8,COLAT,AZ) + DO 3 I=1,81 +3 STE=STE+A(I)*C(2,IS,I) +4 TE(J+4)=10.**STE + RETURN + END +C +C + SUBROUTINE SPHARM(C,L,M,COLAT,AZ) +C CALCULATES THE COEFFICIENTS OF THE SPHERICAL HARMONIC +C EXPANSION THAT WAS USED FOR THE BRACE-THEIS-MODELS. + DIMENSION C(82) + C(1)=1. + K=2 + X=COS(COLAT) + C(K)=X + K=K+1 + DO 10 I=2,L + C(K)=((2*I-1)*X*C(K-1)-(I-1)*C(K-2))/I +10 K=K+1 + Y=SIN(COLAT) + DO 20 MT=1,M + CAZ=COS(MT*AZ) + SAZ=SIN(MT*AZ) + C(K)=Y**MT + K=K+1 + IF(MT.EQ.L) GOTO 16 + C(K)=C(K-1)*X*(2*MT+1) + K=K+1 + IF((MT+1).EQ.L) GOTO 16 + DO 15 I=2+MT,L + C(K)=((2*I-1)*X*C(K-1)-(I+MT-1)*C(K-2))/(I-MT) +15 K=K+1 +16 N=L-MT+1 + DO 18 I=1,N + C(K)=C(K-N)*CAZ + C(K-N)=C(K-N)*SAZ +18 K=K+1 +20 CONTINUE + RETURN + END C C REAL FUNCTION ELTE(H) c---------------------------------------------------------------- C ELECTRON TEMPERATURE PROFILE BASED ON THE TEMPERATURES AT 7 FIXED -C HEIGHTS (AH(7)) AND THE TEMPERATURE GRADIENTS BETWEEN THESE THESE +C HEIGHTS (AH(7)) AND THE TEMPERATURE GRADIENTS BETWEEN THESE THESE C HEIGHTS (ST(6)) GIVEN IN THE COMMON BLOCK. ATE1 IS THE TEMPERATURE C AT THE STARTING HEIGHT 120 KM. D(5) DEFINE THE TRANSITION SPAN FROM C ONE CONSTANT GRADIENT REGION TO THE NEXT. c---------------------------------------------------------------- COMMON /BLOTE/AH(7),ATE1,ST(6),D(5) C - SUM=ATE1+ST(1)*(H-AH(1)) + SUM=ATE1+ST(1)*(H-AH(1)) DO 1 I=1,5 aa = eptr(h ,d(i),ah(i+1)) bb = eptr(ah(1),d(i),ah(i+1)) -1 SUM=SUM+(ST(I+1)-ST(I))*(AA-BB)*D(I) - ELTE=SUM - RETURN - END -C -C - FUNCTION TEDE(H,DEN,COV) -C ELECTRON TEMEPERATURE MODEL AFTER BRACE,THEIS . -C FOR NEG. COV THE MEAN COV-INDEX (3 SOLAR ROT.) IS EXPECTED. -C DEN IS THE ELECTRON DENSITY IN M-3. - Y=1051.+(17.01*H-2746.)* - &EXP(-5.122E-4*H+(6.094E-12-3.353E-14*H)*DEN) - ACOV=ABS(COV) - YC=1.+(.117+2.02E-3*ACOV)/(1.+EXP(-(ACOV-102.5)/5.)) - IF(COV.LT.0.) - &YC=1.+(.123+1.69E-3*ACOV)/(1.+EXP(-(ACOV-115.)/10.)) - TEDE=Y*YC - RETURN - END -C -C -C************************************************************* +1 SUM=SUM+(ST(I+1)-ST(I))*(AA-BB)*D(I) + ELTE=SUM + RETURN + END +C +C + FUNCTION TEDE(H,DEN,COV) +C ELECTRON TEMEPERATURE MODEL AFTER BRACE,THEIS . +C FOR NEG. COV THE MEAN COV-INDEX (3 SOLAR ROT.) IS EXPECTED. +C DEN IS THE ELECTRON DENSITY IN M-3. + Y=1051.+(17.01*H-2746.)* + &EXP(-5.122E-4*H+(6.094E-12-3.353E-14*H)*DEN) + ACOV=ABS(COV) + YC=1.+(.117+2.02E-3*ACOV)/(1.+EXP(-(ACOV-102.5)/5.)) + IF(COV.LT.0.) + &YC=1.+(.123+1.69E-3*ACOV)/(1.+EXP(-(ACOV-115.)/10.)) + TEDE=Y*YC + RETURN + END +C +C +C************************************************************* C**************** ION TEMPERATURE **************************** -C************************************************************* +C************************************************************* C C REAL FUNCTION TI(H) c---------------------------------------------------------------- -C ION TEMPERATURE FOR HEIGHTS NOT GREATER 1000 KM AND NOT LESS HS -C EXPLANATION SEE FUNCTION RPID. +C ION TEMPERATURE FOR HEIGHTS NOT GREATER 1000 KM AND NOT LESS HS +C EXPLANATION SEE FUNCTION RPID. c---------------------------------------------------------------- REAL MM COMMON /BLOCK8/ HS,TNHS,XSM(4),MM(5),G(4),M - SUM=MM(1)*(H-HS)+TNHS - DO 100 I=1,M-1 + SUM=MM(1)*(H-HS)+TNHS + DO 100 I=1,M-1 aa = eptr(h ,g(i),xsm(i)) bb = eptr(hs,g(i),xsm(i)) -100 SUM=SUM+(MM(I+1)-MM(I))*(AA-BB)*G(I) - TI=SUM - RETURN - END +100 SUM=SUM+(MM(I+1)-MM(I))*(AA-BB)*G(I) + TI=SUM + RETURN + END C -C -C************************************************************* -C************* ION RELATIVE PRECENTAGE DENSITY ***************** -C************************************************************* +C +C************************************************************* +C************* ION RELATIVE PRECENTAGE DENSITY ***************** +C************************************************************* C C REAL FUNCTION RPID (H, H0, N0, M, ST, ID, XS) c------------------------------------------------------------------ -C D.BILITZA,1977,THIS ANALYTIC FUNCTION IS USED TO REPRESENT THE -C RELATIVE PRECENTAGE DENSITY OF ATOMAR AND MOLECULAR OXYGEN IONS. -C THE M+1 HEIGHT GRADIENTS ST(M+1) ARE CONNECTED WITH EPSTEIN- -C STEP-FUNCTIONS AT THE STEP HEIGHTS XS(M) WITH TRANSITION -C THICKNESSES ID(M). RPID(H0,H0,N0,....)=N0. +C D.BILITZA,1977,THIS ANALYTIC FUNCTION IS USED TO REPRESENT THE +C RELATIVE PRECENTAGE DENSITY OF ATOMAR AND MOLECULAR OXYGEN IONS. +C THE M+1 HEIGHT GRADIENTS ST(M+1) ARE CONNECTED WITH EPSTEIN- +C STEP-FUNCTIONS AT THE STEP HEIGHTS XS(M) WITH TRANSITION +C THICKNESSES ID(M). RPID(H0,H0,N0,....)=N0. C ARGMAX is the highest allowed argument for EXP in your system. c------------------------------------------------------------------ - REAL N0 - DIMENSION ID(4), ST(5), XS(4) + REAL N0 + DIMENSION ID(4), ST(5), XS(4) COMMON /ARGEXP/ ARGMAX - SUM=(H-H0)*ST(1) - DO 100 I=1,M + SUM=(H-H0)*ST(1) + DO 100 I=1,M XI=ID(I) aa = eptr(h ,xi,xs(i)) bb = eptr(h0,xi,xs(i)) -100 SUM=SUM+(ST(I+1)-ST(I))*(AA-BB)*XI +100 SUM=SUM+(ST(I+1)-ST(I))*(AA-BB)*XI IF(ABS(SUM).LT.ARGMAX) then SM=EXP(SUM) else IF(SUM.Gt.0.0) then @@ -2756,116 +2756,116 @@ c------------------------------------------------------------------ else SM=0.0 endif - RPID= n0 * SM - RETURN - END -C -c - SUBROUTINE RDHHE (H,HB,RDOH,RDO2H,RNO,PEHE,RDH,RDHE) -C BILITZA,FEB.82,H+ AND HE+ RELATIVE PERECENTAGE DENSITY BELOW -C 1000 KM. THE O+ AND O2+ REL. PER. DENSITIES SHOULD BE GIVEN -C (RDOH,RDO2H). HB IS THE ALTITUDE OF MAXIMAL O+ DENSITY. PEHE -C IS THE PRECENTAGE OF HE+ IONS COMPARED TO ALL LIGHT IONS. -C RNO IS THE RATIO OF NO+ TO O2+DENSITY AT H=HB. - RDHE=0.0 - RDH=0.0 - IF(H.LE.HB) GOTO 100 - REST=100.0-RDOH-RDO2H-RNO*RDO2H - RDH=REST*(1.-PEHE/100.) - RDHE=REST*PEHE/100. -100 RETURN - END -C -C - REAL FUNCTION RDNO(H,HB,RDO2H,RDOH,RNO) -C D.BILITZA, 1978. NO+ RELATIVE PERCENTAGE DENSITY ABOVE 100KM. -C FOR MORE INFORMATION SEE SUBROUTINE RDHHE. - IF (H.GT.HB) GOTO 200 - RDNO=100.0-RDO2H-RDOH - RETURN -200 RDNO=RNO*RDO2H - RETURN + RPID= n0 * SM + RETURN + END +C +c + SUBROUTINE RDHHE (H,HB,RDOH,RDO2H,RNO,PEHE,RDH,RDHE) +C BILITZA,FEB.82,H+ AND HE+ RELATIVE PERECENTAGE DENSITY BELOW +C 1000 KM. THE O+ AND O2+ REL. PER. DENSITIES SHOULD BE GIVEN +C (RDOH,RDO2H). HB IS THE ALTITUDE OF MAXIMAL O+ DENSITY. PEHE +C IS THE PRECENTAGE OF HE+ IONS COMPARED TO ALL LIGHT IONS. +C RNO IS THE RATIO OF NO+ TO O2+DENSITY AT H=HB. + RDHE=0.0 + RDH=0.0 + IF(H.LE.HB) GOTO 100 + REST=100.0-RDOH-RDO2H-RNO*RDO2H + RDH=REST*(1.-PEHE/100.) + RDHE=REST*PEHE/100. +100 RETURN + END +C +C + REAL FUNCTION RDNO(H,HB,RDO2H,RDOH,RNO) +C D.BILITZA, 1978. NO+ RELATIVE PERCENTAGE DENSITY ABOVE 100KM. +C FOR MORE INFORMATION SEE SUBROUTINE RDHHE. + IF (H.GT.HB) GOTO 200 + RDNO=100.0-RDO2H-RDOH + RETURN +200 RDNO=RNO*RDO2H + RETURN + END +C +C + SUBROUTINE KOEFP1(PG1O) +C THIEMANN,1979,COEFFICIENTS PG1O FOR CALCULATING O+ PROFILES +C BELOW THE F2-MAXIMUM. CHOSEN TO APPROACH DANILOV- +C SEMENOV'S COMPILATION. + DIMENSION PG1O(80), FELD (80) + DATA FELD/-11.0,-11.0,4.0,-11.0,0.08018,0.13027,0.04216, + &0.25,-0.00686,0.00999,5.113,0.1 ,170.0,180.0,0.1175,0.15, + &-11.0,1.0 ,2.0,-11.0,0.069,0.161,0.254,0.18,0.0161,0.0216, + &0.03014,0.1,152.0,167.0,0.04916,0.17,-11.0,2.0,2.0,-11.0, + &0.072,0.092,0.014,0.21,0.01389,0.03863,0.05762,0.12,165.0, + &168.0,0.008,0.258,-11.0,1.0,3.0,-11.0,0.091,0.088,0.008, + &0.34,0.0067,0.0195,0.04,0.1,158.0,172.0,0.01,0.24,-11.0, + &2.0,3.0,-11.0,0.083,0.102,0.045,0.03,0.00127,0.01,0.05, + &0.09,167.0,185.0,0.015,0.18/ + DO 10 I=1,80 +10 PG1O(I)=FELD(I) + RETURN END C C - SUBROUTINE KOEFP1(PG1O) -C THIEMANN,1979,COEFFICIENTS PG1O FOR CALCULATING O+ PROFILES -C BELOW THE F2-MAXIMUM. CHOSEN TO APPROACH DANILOV- -C SEMENOV'S COMPILATION. - DIMENSION PG1O(80), FELD (80) - DATA FELD/-11.0,-11.0,4.0,-11.0,0.08018,0.13027,0.04216, - &0.25,-0.00686,0.00999,5.113,0.1 ,170.0,180.0,0.1175,0.15, - &-11.0,1.0 ,2.0,-11.0,0.069,0.161,0.254,0.18,0.0161,0.0216, - &0.03014,0.1,152.0,167.0,0.04916,0.17,-11.0,2.0,2.0,-11.0, - &0.072,0.092,0.014,0.21,0.01389,0.03863,0.05762,0.12,165.0, - &168.0,0.008,0.258,-11.0,1.0,3.0,-11.0,0.091,0.088,0.008, - &0.34,0.0067,0.0195,0.04,0.1,158.0,172.0,0.01,0.24,-11.0, - &2.0,3.0,-11.0,0.083,0.102,0.045,0.03,0.00127,0.01,0.05, - &0.09,167.0,185.0,0.015,0.18/ - DO 10 I=1,80 -10 PG1O(I)=FELD(I) - RETURN - END -C -C - SUBROUTINE KOEFP2(PG2O) -C THIEMANN,1979,COEFFICIENTS FOR CALCULATION OF O+ PROFILES -C ABOVE THE F2-MAXIMUM (DUMBS,SPENNER:AEROS-COMPILATION) - DIMENSION PG2O(32), FELD(32) - DATA FELD/1.0,-11.0,-11.0,1.0,695.0,-.000781,-.00264, - &2177.0,1.0,-11.0,-11.0,2.0,570.0,-.002,-.0052,1040.0, - &2.0,-11.0,-11.0,1.0,695.0,-.000786,-.00165,3367.0,2.0, - &-11.0,-11.0,2.0,575.0,-.00126,-.00524,1380.0/ - DO 10 I=1,32 -10 PG2O(I)=FELD(I) - RETURN - END -C -C - SUBROUTINE KOEFP3(PG3O) -C THIEMANN,1979,COEFFICIENTS FOR CALCULATING O2+ PROFILES. -C CHOSEN AS TO APPROACH DANILOV-SEMENOV'S COMPILATION. - DIMENSION PG3O(80), FELD(80) - DATA FELD/-11.0,1.0,2.0,-11.0,160.0,31.0,130.0,-10.0, - &198.0,0.0,0.05922,-0.07983,-0.00397,0.00085,-0.00313, - &0.0,-11.0,2.0,2.0,-11.0,140.0,30.0,130.0,-10.0,190.0, - &0.0,0.05107,-0.07964,0.00097,-0.01118,-0.02614,-0.09537, - &-11.0,1.0,3.0,-11.0,140.0,37.0,125.0,0.0,182.0,0.0, - &0.0307,-0.04968,-0.00248,-0.02451,-0.00313,0.0,-11.0, - &2.0,3.0,-11.0,140.0,37.0,125.0,0.0,170.0,0.0,0.02806, - &-0.04716,0.00066,-0.02763,-0.02247,-0.01919,-11.0,-11.0, - &4.0,-11.0,140.0,45.0,136.0,-9.0,181.0,-26.0,0.02994, - &-0.04879,-0.01396,0.00089,-0.09929,0.05589/ - DO 10 I=1,80 -10 PG3O(I)=FELD(I) - RETURN - END -C -C - SUBROUTINE SUFE (FIELD,RFE,M,FE) + SUBROUTINE KOEFP2(PG2O) +C THIEMANN,1979,COEFFICIENTS FOR CALCULATION OF O+ PROFILES +C ABOVE THE F2-MAXIMUM (DUMBS,SPENNER:AEROS-COMPILATION) + DIMENSION PG2O(32), FELD(32) + DATA FELD/1.0,-11.0,-11.0,1.0,695.0,-.000781,-.00264, + &2177.0,1.0,-11.0,-11.0,2.0,570.0,-.002,-.0052,1040.0, + &2.0,-11.0,-11.0,1.0,695.0,-.000786,-.00165,3367.0,2.0, + &-11.0,-11.0,2.0,575.0,-.00126,-.00524,1380.0/ + DO 10 I=1,32 +10 PG2O(I)=FELD(I) + RETURN + END +C +C + SUBROUTINE KOEFP3(PG3O) +C THIEMANN,1979,COEFFICIENTS FOR CALCULATING O2+ PROFILES. +C CHOSEN AS TO APPROACH DANILOV-SEMENOV'S COMPILATION. + DIMENSION PG3O(80), FELD(80) + DATA FELD/-11.0,1.0,2.0,-11.0,160.0,31.0,130.0,-10.0, + &198.0,0.0,0.05922,-0.07983,-0.00397,0.00085,-0.00313, + &0.0,-11.0,2.0,2.0,-11.0,140.0,30.0,130.0,-10.0,190.0, + &0.0,0.05107,-0.07964,0.00097,-0.01118,-0.02614,-0.09537, + &-11.0,1.0,3.0,-11.0,140.0,37.0,125.0,0.0,182.0,0.0, + &0.0307,-0.04968,-0.00248,-0.02451,-0.00313,0.0,-11.0, + &2.0,3.0,-11.0,140.0,37.0,125.0,0.0,170.0,0.0,0.02806, + &-0.04716,0.00066,-0.02763,-0.02247,-0.01919,-11.0,-11.0, + &4.0,-11.0,140.0,45.0,136.0,-9.0,181.0,-26.0,0.02994, + &-0.04879,-0.01396,0.00089,-0.09929,0.05589/ + DO 10 I=1,80 +10 PG3O(I)=FELD(I) + RETURN + END +C +C + SUBROUTINE SUFE (FIELD,RFE,M,FE) C SELECTS THE REQUIRED ION DENSITY PARAMETER SET. -C THE INPUT FIELD INCLUDES DIFFERENT SETS OF DIMENSION M EACH -C CARACTERISED BY 4 HEADER NUMBERS. RFE(4) SHOULD CONTAIN THE -C CHOSEN HEADER NUMBERS.FE(M) IS THE CORRESPONDING SET. - DIMENSION RFE(4),FE(12),FIELD(80),EFE(4) - K=0 -100 DO 101 I=1,4 - K=K+1 -101 EFE(I)=FIELD(K) - DO 111 I=1,M - K=K+1 -111 FE(I)=FIELD(K) - DO 120 I=1,4 - IF((EFE(I).GT.-10.0).AND.(RFE(I).NE.EFE(I))) GOTO 100 -120 CONTINUE - RETURN - END +C THE INPUT FIELD INCLUDES DIFFERENT SETS OF DIMENSION M EACH +C CARACTERISED BY 4 HEADER NUMBERS. RFE(4) SHOULD CONTAIN THE +C CHOSEN HEADER NUMBERS.FE(M) IS THE CORRESPONDING SET. + DIMENSION RFE(4),FE(12),FIELD(80),EFE(4) + K=0 +100 DO 101 I=1,4 + K=K+1 +101 EFE(I)=FIELD(K) + DO 111 I=1,M + K=K+1 +111 FE(I)=FIELD(K) + DO 120 I=1,4 + IF((EFE(I).GT.-10.0).AND.(RFE(I).NE.EFE(I))) GOTO 100 +120 CONTINUE + RETURN + END C C subroutine iondani(id,ismo,hx,zd,fd,fs,dion) c------------------------------------------------------- c id day of month -c ismo seasonal month (Northern Hemisphere January +c ismo seasonal month (Northern Hemisphere January c is ismo=1 and so is Southern H. July) c hx altitude in km c zd solar zenith angle in degrees @@ -2921,7 +2921,7 @@ c h altitude in km c zd solar zenith angle in degrees c fd latitude in degrees (same result for fd and -fd) c fs 10.7cm solar radio flux -c t seasonal decimal month (Northern Hemisphere January +c t seasonal decimal month (Northern Hemisphere January c 15 is t=1.5 and so is Southern Hemisphere July 15) c cn(1) O+ relative density in percent c cn(2) H+ relative density in percent @@ -2952,7 +2952,7 @@ c & pn(5,6),phe(5,6),pno(5,6),po2(5,6),pcl(5,6) & 4*0.,-6.3E-5,-6.74E-3,-7.93E-3,-4.65E-3,0.,-3.26E-3, & 4*0.,-1.17E-5,4.88E-3,-1.31E-3,-7.03E-4,0.,-2.38E-3/ data phe/-8.95E-1,6.1,5.39,0.,8.01,4*0.,1200.,4*0.,-1.04E-5, - & 1.9E-3,9.53E-4,1.06E-3,0.,-3.44E-3,10*0./ + & 1.9E-3,9.53E-4,1.06E-3,0.,-3.44E-3,10*0./ c data pno/-22.4,17.7,-13.4,-4.88,62.3,32.7,0.,19.8,2.07,115., c & 5*0.,3.94E-3,0.,2.48E-3,2.15E-4,6.67E-3,5*0., c & -8.4E-3,0.,-3.64E-3,2.E-3,-2.59E-2/ @@ -2992,13 +2992,13 @@ c do 5 i=1,7 beth(i)= var(6) hx=h-hm(i) if(hx) 1,2,3 -1 arg = hx * (hx * all(i) + betl(i)) +1 arg = hx * (hx * all(i) + betl(i)) cn(i) = 0. if(arg.gt.-argmax) cn(i) = cm(i) * exp( arg ) goto 4 2 cn(i) = cm(i) goto 4 -3 arg = hx * (hx * alh(i) + beth(i)) +3 arg = hx * (hx * alh(i) + beth(i)) cn(i) = 0. if(arg.gt.-argmax) cn(i) = cm(i) * exp( arg ) 4 continue @@ -3018,67 +3018,67 @@ C * INPUT: * hei - altitude in km * xhi - solar zenith angle in degree -* it - seasonal month (Northern Hemisphere January +* it - seasonal month (Northern Hemisphere January * is ismo=1 and so is Southern Hemisohere July) * F - 10.7cm solar radio flux (12-month running mean) * OUTPUT: * R1 - NO+ concentration (in percent) -* R2 - O2+ concentration (in percent) -* R3 - Cb+ concentration (in percent) -* R4 - O+ concentration (in percent) +* R2 - O2+ concentration (in percent) +* R3 - Cb+ concentration (in percent) +* R4 - O+ concentration (in percent) * -* A.D. Danilov and N.V. Smirnova, Improving the 75 to 300 km ion +* A.D. Danilov and N.V. Smirnova, Improving the 75 to 300 km ion * composition model of the IRI, Adv. Space Res. 15, #2, 171-177, 1995. * *----------------------------------------------------------------- dimension j1ms70(7),j2ms70(7),h1s70(13,7),h2s70(13,7), * R1ms70(13,7),R2ms70(13,7),rk1ms70(13,7),rk2ms70(13,7), - * j1ms140(7),j2ms140(7),h1s140(13,7),h2s140(13,7), + * j1ms140(7),j2ms140(7),h1s140(13,7),h2s140(13,7), * R1ms140(13,7),R2ms140(13,7),rk1ms140(13,7),rk2ms140(13,7), * j1mw70(7),j2mw70(7),h1w70(13,7),h2w70(13,7), * R1mw70(13,7),R2mw70(13,7),rk1mw70(13,7),rk2mw70(13,7), - * j1mw140(7),j2mw140(7),h1w140(13,7),h2w140(13,7), + * j1mw140(7),j2mw140(7),h1w140(13,7),h2w140(13,7), * R1mw140(13,7),R2mw140(13,7),rk1mw140(13,7),rk2mw140(13,7), * j1mr70(7),j2mr70(7),h1r70(13,7),h2r70(13,7), * R1mr70(13,7),R2mr70(13,7),rk1mr70(13,7),rk2mr70(13,7), - * j1mr140(7),j2mr140(7),h1r140(13,7),h2r140(13,7), + * j1mr140(7),j2mr140(7),h1r140(13,7),h2r140(13,7), * R1mr140(13,7),R2mr140(13,7),rk1mr140(13,7),rk2mr140(13,7) - data j1ms70/11,11,10,10,11,9,11/ + data j1ms70/11,11,10,10,11,9,11/ data j2ms70/13,11,10,11,11,9,11/ data h1s70/75,85,90,95,100,120,130,200,220,250,270,0,0, - * 75,85,90,95,100,120,130,200,220,250,270,0,0, + * 75,85,90,95,100,120,130,200,220,250,270,0,0, * 75,85,90,95,100,115,200,220,250,270,0,0,0, * 75,80,95,100,120,140,200,220,250,270,0,0,0, * 75,80,95,100,120,150,170,200,220,250,270,0,0, * 75,80,95,100,140,200,220,250,270,0,0,0,0, * 75,80,85,95,100,110,145,200,220,250,270,0,0/ data h2s70/75,80,90,95,100,120,130,140,150,200,220,250,270, - * 75,80,90,95,100,120,130,200,220,250,270,0,0, + * 75,80,90,95,100,120,130,200,220,250,270,0,0, * 75,80,90,95,100,115,200,220,250,270,0,0,0, * 75,80,95,100,120,140,150,200,220,250,270,0,0, * 75,80,95,100,120,150,170,200,220,250,270,0,0, * 75,80,95,100,140,200,220,250,270,0,0,0,0, * 75,80,90,95,100,110,145,200,220,250,270,0,0/ data R1ms70/6,30,60,63,59,59,66,52,20,4,2,0,0, - * 6,30,60,63,69,62,66,52,20,4,2,0,0, + * 6,30,60,63,69,62,66,52,20,4,2,0,0, * 6,30,60,63,80,68,53,20,4,2,0,0,0, - * 4,10,60,85,65,65,52,25,12,4,0,0,0, - * 4,10,60,89,72,60,60,52,30,20,10,0,0, - * 4,10,60,92,68,54,40,25,13,0,0,0,0, - * 1,8,20,60,95,93,69,65,45,30,20,0,0/ + * 4,10,60,85,65,65,52,25,12,4,0,0,0, + * 4,10,60,89,72,60,60,52,30,20,10,0,0, + * 4,10,60,92,68,54,40,25,13,0,0,0,0, + * 1,8,20,60,95,93,69,65,45,30,20,0,0/ data R2ms70/4,10,30,32,41,41,32,29,34,28,15,3,1, * 4,10,30,32,31,38,32,28,15,3,1,0,0, * 4,10,30,32,20,32,28,15,3,1,0,0,0, * 2,6,30,15,35,30,34,26,19,8,3,0,0, * 2,6,30,11,28,38,29,29,25,12,5,0,0, * 2,6,30,8,32,30,20,14,8,0,0,0,0, - * 1,2,10,20,5,7,31,23,18,15,10,0,0/ + * 1,2,10,20,5,7,31,23,18,15,10,0,0/ data rk1ms70/2.4,6.,.6,-.8,0,.7,-.2,-1.6,-.533,-.1,-.067,0,0, - * 2.4,6.,.6,1.2,-.35,.4,-.2,-1.6,-.533,-.1,-.067,0,0, + * 2.4,6.,.6,1.2,-.35,.4,-.2,-1.6,-.533,-.1,-.067,0,0, * 2.4,6.,.6,3.4,-.8,-.176,-1.65,-.533,-.1,-.067,0,0,0, * 1.2,3.333,5.,-1.,0,-.216,-1.35,-.433,-.4,-.1,0,0,0, - * 1.2,3.333,5.8,-.85,-.4,0,-.267,-1.1,-.333,-.4,-.2,0,0, - * 1.2,3.333,6.4,-.6,-.233,-.7,-.5,-.6,-.267,0,0,0,0, + * 1.2,3.333,5.8,-.85,-.4,0,-.267,-1.1,-.333,-.4,-.2,0,0, + * 1.2,3.333,6.4,-.6,-.233,-.7,-.5,-.6,-.267,0,0,0,0, * 1.4,2.4,4.,7.,-.2,-.686,-.072,-1.,-.5,-.5,-.5,0,0/ data rk2ms70/1.2,2.,.4,1.8,0,-.9,-.3,.5,-.12,-.65,-.4,-.1,-.033, * 1.2,2.,.4,-.2,.35,-.6,-.057,-.65,-.4,-.1,-.033,0,0, @@ -3087,7 +3087,7 @@ C * .8,1.6,-3.8,.85,.333,-.45,0,-.2,-.433,-.35,-.1,0,0, * .8,1.6,-4.4,.6,-.033,-.5,-.2,-.3,-.2,0,0,0,0, * .2,.8,2.,-3.,.2,.686,-.145,-.25,-.1,-.25,-.2,0,0/ - data j1ms140/11,11,10,10,9,9,12/ + data j1ms140/11,11,10,10,9,9,12/ data j2ms140/11,11,10,9,10,10,12/ data h1s140/75,85,90,95,100,120,130,140,200,220,250,0,0, * 75,85,90,95,100,120,130,140,200,220,250,0,0, @@ -3109,16 +3109,16 @@ C * 4,10,60,85,66,66,38,22,9,1,0,0,0, * 4,10,60,89,71,42,26,17,10,0,0,0,0, * 4,10,60,93,71,48,35,22,10,0,0,0,0, - * 1,8,20,60,95,93,72,60,58,40,26,13,0/ + * 1,8,20,60,95,93,72,60,58,40,26,13,0/ data R2ms140/4,10,30,32,41,41,30,30,10,6,1,0,0, * 4,10,30,32,31,38,31,29,9,6,1,0,0, * 4,10,30,32,20,35,26,9,6,1,0,0,0, * 2,6,30,15,34,24,10,5,1,0,0,0,0, * 2,6,30,11,28,37,21,14,8,5,0,0,0, * 2,6,30,7,29,36,29,20,13,5,0,0,0, - * 1,2,10,20,5,7,28,32,28,20,14,7,0/ + * 1,2,10,20,5,7,28,32,28,20,14,7,0/ data rk1ms140/2.4,6.,.6,-.8,0,.7,0,-.467,-1.2,-.433,0,0,0, - * 2.4,6.,.6,1.2,-.35,.4,0,-.467,-1.2,-.433,0,0,0, + * 2.4,6.,.6,1.2,-.35,.4,0,-.467,-1.2,-.433,0,0,0, * 2.4,6.,.6,3.4,-.75,0,-.45,-1.2,-.433,0,0,0,0, * 1.2,3.333,5.,-.95,0,-.467,-.8,-.433,-.4,0,0,0,0, * 1.2,3.333,5.8,-.9,-.363,-.8,-.3,-.35,-.3,0,0,0,0, @@ -3129,143 +3129,143 @@ C * 1.2,2.,.4,-2.4,.75,-.2,-.486,-.15,-.166,0,0,0,0, * .8,1.6,-3.,.95,-.167,-.7,-.1,-.2,0,0,0,0,0, * .8,1.6,-3.8,.85,.225,-.4,-.35,-.2,-.15,-.133,0,0,0, - * .8,1.6,-4.6,.733,.233,-.175,-.45,-.233,-.4,-.1,0,0,0, + * .8,1.6,-4.6,.733,.233,-.175,-.45,-.233,-.4,-.1,0,0,0, * .2,.8,2.,-3.,.2,.7,.1,-.2,-.4,-.2,-.35,-.167,0/ - data j1mr70/12,12,12,9,10,11,13/ + data j1mr70/12,12,12,9,10,11,13/ data j2mr70/9,9,10,13,12,11,11/ data h1r70/75,80,90,95,100,120,140,180,200,220,250,270,0, - * 75,80,90,95,100,120,145,180,200,220,250,270,0, - * 75,80,90,95,100,120,145,180,200,220,250,270,0, + * 75,80,90,95,100,120,145,180,200,220,250,270,0, + * 75,80,90,95,100,120,145,180,200,220,250,270,0, * 75,95,100,110,140,180,200,250,270,0,0,0,0, * 75,95,125,150,185,195,200,220,250,270,0,0,0, * 75,95,100,150,160,170,190,200,220,250,270,0,0, * 75,80,85,95,100,140,160,170,190,200,220,250,270/ data h2r70/75,95,100,120,180,200,220,250,270,0,0,0,0, - * 75,95,100,120,180,200,220,250,270,0,0,0,0, - * 75,95,100,120,130,190,200,220,250,270,0,0,0, + * 75,95,100,120,180,200,220,250,270,0,0,0,0, + * 75,95,100,120,130,190,200,220,250,270,0,0,0, * 75,80,85,95,100,110,130,180,190,200,220,250,270, * 75,80,85,95,100,125,150,190,200,220,250,270,0, - * 75,80,85,95,100,150,190,200,220,250,270,0,0, + * 75,80,85,95,100,150,190,200,220,250,270,0,0, * 75,85,95,100,140,180,190,200,220,250,270,0,0/ data R1mr70/13,17,57,57,30,53,58,38,33,14,6,2,0, - * 13,17,57,57,37,56,56,38,33,14,6,2,0, - * 13,17,57,57,47,58,55,37,33,14,6,2,0, - * 5,65,54,58,58,38,33,9,1,0,0,0,0, - * 5,65,65,54,40,40,45,26,17,10,0,0,0, - * 5,65,76,56,57,48,44,51,35,22,10,0,0, - * 3,11,35,75,90,65,63,54,54,50,40,26,13/ + * 13,17,57,57,37,56,56,38,33,14,6,2,0, + * 13,17,57,57,47,58,55,37,33,14,6,2,0, + * 5,65,54,58,58,38,33,9,1,0,0,0,0, + * 5,65,65,54,40,40,45,26,17,10,0,0,0, + * 5,65,76,56,57,48,44,51,35,22,10,0,0, + * 3,11,35,75,90,65,63,54,54,50,40,26,13/ data R2mr70/7,43,70,47,15,17,10,4,0,0,0,0,0, - * 7,43,63,44,17,17,10,4,0,0,0,0,0, + * 7,43,63,44,17,17,10,4,0,0,0,0,0, * 7,43,53,42,42,13,17,10,4,0,0,0,0, * 3,5,26,34,46,42,41,23,16,16,10,1,0, - * 3,5,26,34,35,35,42,25,22,14,8,5,0, + * 3,5,26,34,35,35,42,25,22,14,8,5,0, * 3,5,26,34,24,41,31,26,20,13,5,0,0, - * 3,15,15,10,35,35,30,34,20,14,7,0,0/ + * 3,15,15,10,35,35,30,34,20,14,7,0,0/ data rk1mr70/.8,4.,0,-5.4,1.15,.25,-.5,-.25,-.95,-.267,-.2, * -.067,0, - * .8,4.,0,-4.,.95,0,-.514,-.25,-.95,-.267,-.2,-.067,0, - * .8,4.,0,-2.,.55,-.12,-.514,-.2,-.95,-.267,-.2,-.067,0, - * 3.,-2.2,.4,0,-.5,-.25,-.48,-.4,-.033,0,0,0,0, - * 3.,0,-.44,-.466,0,1.0,-.95,-.3,-.35,-.3,0,0,0, - * 3.,2.2,-.4,0.1,-.9,-.2,.7,-.8,-.433,-.6,-.267,0,0, + * .8,4.,0,-4.,.95,0,-.514,-.25,-.95,-.267,-.2,-.067,0, + * .8,4.,0,-2.,.55,-.12,-.514,-.2,-.95,-.267,-.2,-.067,0, + * 3.,-2.2,.4,0,-.5,-.25,-.48,-.4,-.033,0,0,0,0, + * 3.,0,-.44,-.466,0,1.0,-.95,-.3,-.35,-.3,0,0,0, + * 3.,2.2,-.4,0.1,-.9,-.2,.7,-.8,-.433,-.6,-.267,0,0, * 1.6,4.8,4.,3.,-.625,-.1,-.9,0,-.4,-.5,-.467,-.65,-.3/ data rk2mr70/1.8,5.4,-1.15,-.533,.1,-.35,-.2,-.2,0,0,0,0,0, * 1.8,4.,-.95,-.45,0,-.35,-.2,-.2,0,0,0,0,0, - * 1.8,2.,-.55,0,-.483,.4,-.35,-.2,-.2,0,0,0,0, + * 1.8,2.,-.55,0,-.483,.4,-.35,-.2,-.2,0,0,0,0, * .4,4.2,.8,2.4,-.4,-.05,-.36,-.7,0,-.3,-.3,-.05,0, - * .4,4.2,.8,.2,0,.28,-.425,-.3,-.4,-.2,-.15,-.133,0, - * .4,4.2,.8,-2.,.34,-.25,-.5,-.3,-.233,-.4,-.1,0,0, + * .4,4.2,.8,.2,0,.28,-.425,-.3,-.4,-.2,-.15,-.133,0, + * .4,4.2,.8,-2.,.34,-.25,-.5,-.3,-.233,-.4,-.1,0,0, * 1.2,0,-1.,.625,0,-.5,.4,-.7,-.2,-.35,-.167,0,0/ - data j1mr140/12,12,11,12,9,9,13/ + data j1mr140/12,12,11,12,9,9,13/ data j2mr140/10,9,10,12,13,13,12/ data h1r140/75,80,90,95,100,115,130,145,200,220,250,270,0, - * 75,80,90,95,100,110,120,145,200,220,250,270,0, + * 75,80,90,95,100,110,120,145,200,220,250,270,0, * 75,80,90,95,100,115,150,200,220,250,270,0,0, * 75,95,100,120,130,140,150,190,200,220,250,270,0, * 75,95,120,150,190,200,220,250,270,0,0,0,0, * 75,95,100,145,190,200,220,250,270,0,0,0,0, * 75,80,85,95,100,120,160,170,190,200,220,250,270/ data h2r140/75,95,100,115,130,175,200,220,250,270,0,0,0, - * 75,95,100,110,175,200,220,250,270,0,0,0,0, - * 75,95,100,115,130,180,200,220,250,270,0,0,0, + * 75,95,100,110,175,200,220,250,270,0,0,0,0, + * 75,95,100,115,130,180,200,220,250,270,0,0,0, * 75,80,85,95,100,120,130,190,200,220,250,270,0, * 75,80,85,95,100,120,140,160,190,200,220,250,270, * 75,80,85,95,100,145,165,180,190,200,220,250,270, * 75,85,95,100,120,145,170,190,200,220,250,270,0/ data R1mr140/13,17,57,57,28,51,56,56,12,8,1,0,0, - * 13,17,57,57,36,46,55,56,10,8,1,0,0, + * 13,17,57,57,36,46,55,56,10,8,1,0,0, * 13,17,57,57,46,56,55,12,8,1,0,0,0, * 5,65,54,59,56,56,53,23,16,13,3,1,0, * 5,65,65,54,29,16,16,10,2,0,0,0,0, * 5,65,76,58,36,25,20,12,7,0,0,0,0, - * 3,11,35,75,91,76,58,49,45,32,28,20,12/ + * 3,11,35,75,91,76,58,49,45,32,28,20,12/ data R2mr140/7,43,72,49,44,14,7,4,1,0,0,0,0, - * 7,43,64,51,14,7,4,1,0,0,0,0,0, + * 7,43,64,51,14,7,4,1,0,0,0,0,0, * 7,43,54,44,44,13,7,4,1,0,0,0,0, * 3,5,26,34,46,41,44,9,11,7,2,1,0, - * 3,5,26,34,35,35,40,40,16,14,9,5,2, + * 3,5,26,34,35,35,40,40,16,14,9,5,2, * 3,5,26,34,24,40,40,32,19,20,10,7,3, - * 3,15,15,9,24,35,40,28,28,20,10,8,0/ + * 3,15,15,9,24,35,40,28,28,20,10,8,0/ data rk1mr140/.8,4.,0,-5.8,1.533,.333,0,-.8,-.2,-.233,-.05,0,0, * .8,4.,0,-4.2,1.3,.6,.04,-.836,-.1,-.233,-.05,0,0, - * .8,4.,0,-2.2,.667,-.029,-.86,-.2,-.233,-.05,0,0,0, + * .8,4.,0,-2.2,.667,-.029,-.86,-.2,-.233,-.05,0,0,0, * 3.,-2.2,.25,-.3,0,-.3,-.75,-.7,-.15,-.333,-.1,-.033,0, - * 3.,0,-.367,-.625,-1.3,0,-.2,-.4,-.067,0,0,0,0, + * 3.,0,-.367,-.625,-1.3,0,-.2,-.4,-.067,0,0,0,0, * 3.,2.2,-.4,-.489,-1.1,-.25,-.267,-.25,-.2,0,0,0,0, * 1.6,4.8,4.,3.2,-.75,-.45,-.9,-.2,-1.3,-.2,-.267,-.4,-.3/ data rk2mr140/1.8,5.8,-1.533,-.333,-.667,-.28,-.15,-.1,-.05, * 0,0,0,0, * 1.8,4.2,-1.3,-.569,-.28,-.15,-.1,-.05,0,0,0,0,0, - * 1.8,2.2,-.667,0,-.62,-.3,-.15,-.1,-.05,0,0,0,0, + * 1.8,2.2,-.667,0,-.62,-.3,-.15,-.1,-.05,0,0,0,0, * .4,4.2,.8,2.4,-.25,.3,-.583,.2,-.2,-.167,-.05,-.033,0, - * .4,4.2,.8,.02,0,.25,0,-.6,-.2,-.25,-.133,-.15,-.067, - * .4,4.2,.8,-2.,.356,0,-.533,-1.3,.1,-.5,-.1,-.2,-.1, + * .4,4.2,.8,.02,0,.25,0,-.6,-.2,-.25,-.133,-.15,-.067, + * .4,4.2,.8,-2.,.356,0,-.533,-1.3,.1,-.5,-.1,-.2,-.1, * 1.2,0,-1.2,.75,.44,.2,-.6,0,-.4,-.333,-.1,-.2,0/ - data j1mw70/13,13,13,13,9,8,9/ + data j1mw70/13,13,13,13,9,8,9/ data j2mw70/10,10,11,11,9,8,11/ data h1w70/75,80,85,95,100,110,125,145,180,200,220,250,270, * 75,80,85,95,100,110,120,150,180,200,220,250,270, * 75,80,85,95,100,110,120,155,180,200,220,250,270, - * 75,80,90,100,110,120,140,160,190,200,220,250,270, + * 75,80,90,100,110,120,140,160,190,200,220,250,270, * 75,80,90,110,150,200,220,250,270,0,0,0,0, * 75,80,90,100,150,200,250,270,0,0,0,0,0, * 75,80,90,100,120,130,140,200,270,0,0,0,0/ data h2w70/75,90,95,100,110,125,190,200,250,270,0,0,0, - * 75,90,95,100,110,125,190,200,250,270,0,0,0, + * 75,90,95,100,110,125,190,200,250,270,0,0,0, * 75,90,95,100,110,120,145,190,200,250,270,0,0, * 75,80,95,100,110,120,150,200,220,250,270,0,0, * 75,80,90,95,110,145,200,250,270,0,0,0,0, * 75,80,90,100,140,150,200,250,0,0,0,0,0, - * 75,80,85,90,100,120,130,140,160,200,270,0,0/ + * 75,80,85,90,100,120,130,140,160,200,270,0,0/ data R1mw70/28,35,65,65,28,44,46,50,25,25,10,5,0, * 28,35,65,65,36,49,47,47,25,25,10,5,0, * 28,35,65,65,48,54,51,43,25,25,10,5,0, - * 16,24,66,54,58,50,50,38,25,25,10,5,0, - * 16,24,66,66,46,30,20,6,3,0,0,0,0, - * 16,24,66,76,49,32,12,7,0,0,0,0,0, - * 6,19,67,91,64,68,60,40,12,0,0,0,0/ + * 16,24,66,54,58,50,50,38,25,25,10,5,0, + * 16,24,66,66,46,30,20,6,3,0,0,0,0, + * 16,24,66,76,49,32,12,7,0,0,0,0,0, + * 6,19,67,91,64,68,60,40,12,0,0,0,0/ data R2mw70/5,35,35,72,56,54,12,12,2,0,0,0,0, - * 5,35,35,64,51,53,12,12,2,0,0,0,0, + * 5,35,35,64,51,53,12,12,2,0,0,0,0, * 5,35,35,52,46,49,41,12,12,2,0,0,0, * 4,10,40,46,42,50,41,12,7,2,0,0,0, * 4,10,30,34,34,51,14,4,2,0,0,0,0, * 4,10,30,24,45,48,20,5,0,0,0,0,0, - * 2,6,17,23,9,36,32,40,40,20,6,0,0/ + * 2,6,17,23,9,36,32,40,40,20,6,0,0/ data rk1mw70/1.4,6.,0,-7.4,1.6,.133,.2,-.714,0,-.75,-.167,-.25,0, * 1.4,6.,0,-5.8,1.3,-.2,0,-.733,0,-.75,-.167,-.25,0, * 1.4,6.,0,-3.4,.6,-.3,-.229,-.72,0,-.75,-.167,-.25,0, - * 1.6,4.2,-1.2,.4,-.8,0,-.6,-.433,0,-.75,-.167,-.25,0, + * 1.6,4.2,-1.2,.4,-.8,0,-.6,-.433,0,-.75,-.167,-.25,0, * 1.6,4.2,0,-.5,-.32,-.5,-.467,-.15,-.1,0,0,0,0, - * 1.6,4.2,1.,-.54,-.34,-.4,-.25,-.2,0,0,0,0,0, + * 1.6,4.2,1.,-.54,-.34,-.4,-.25,-.2,0,0,0,0,0, * 2.6,4.8,2.4,-1.35,.4,-.8,-.333,-.4,-.3,0,0,0,0/ data rk2mw70/2.,0,7.4,-1.6,-.133,-.646,0,-.2,-.1,0,0,0,0, - * 2.,0,5.8,-1.3,.133,-.631,0,-.2,-.1,0,0,0,0, + * 2.,0,5.8,-1.3,.133,-.631,0,-.2,-.1,0,0,0,0, * 2.,0,3.4,-.6,.3,-.32,-.644,0,-.2,-.1,0,0,0, * 1.2,2.,1.2,-.4,.8,-.3,-.58,-.25,-.167,-.1,0,0,0, - * 1.2,2.,.8,0,.486,-.673,-.2,-.1,-.066,0,0,0,0, - * 1.2,2.,-.6,.525,.3,-.56,-.3,-.1,0,0,0,0,0, + * 1.2,2.,.8,0,.486,-.673,-.2,-.1,-.066,0,0,0,0, + * 1.2,2.,-.6,.525,.3,-.56,-.3,-.1,0,0,0,0,0, * .8,2.2,1.2,-1.4,1.35,-.4,.8,0,-.5,-.2,-.167,0,0/ - data j1mw140/12,11,11,11,11,10,12/ + data j1mw140/12,11,11,11,11,10,12/ data j2mw140/10,11,11,11,11,10,12/ data h1w140/75,80,85,95,100,110,125,145,190,200,220,250,0, * 75,80,85,95,100,110,120,150,190,220,250,0,0, @@ -3276,25 +3276,25 @@ C * 75,80,90,100,120,130,140,160,190,200,250,270,0/ data h2w140/75,90,95,100,110,125,190,200,220,250,0,0,0, * 75,90,95,100,110,120,125,190,200,220,250,0,0, - * 75,90,95,100,110,120,145,190,200,220,250,0,0, + * 75,90,95,100,110,120,145,190,200,220,250,0,0, * 75,80,95,100,110,120,150,190,200,220,250,0,0, * 75,80,90,95,110,145,190,200,220,250,270,0,0, * 75,80,90,100,140,150,200,220,250,270,0,0,0, - * 75,80,85,90,100,120,130,140,160,180,200,220,0/ + * 75,80,85,90,100,120,130,140,160,180,200,220,0/ data R1mw140/28,35,65,65,28,44,46,50,9,6,2,0,0, * 28,35,65,65,36,49,47,47,8,2,0,0,0, * 28,35,65,65,48,54,51,43,8,2,0,0,0, - * 16,24,66,54,58,50,50,42,8,2,0,0,0, + * 16,24,66,54,58,50,50,42,8,2,0,0,0, * 16,24,66,66,46,49,9,10,7,2,0,0,0, * 16,24,66,76,49,54,10,14,4,1,0,0,0, - * 6,19,67,91,64,68,60,58,11,20,5,2,0/ + * 6,19,67,91,64,68,60,58,11,20,5,2,0/ data R2mw140/5,35,35,72,56,54,5,5,1,0,0,0,0, * 5,35,35,64,51,53,53,5,5,1,0,0,0, - * 5,35,35,52,46,49,41,5,5,1,0,0,0, - * 4,10,40,46,42,50,41,5,5,1,0,0,0, - * 4,10,30,34,34,51,10,5,3,1,0,0,0, + * 5,35,35,52,46,49,41,5,5,1,0,0,0, + * 4,10,40,46,42,50,41,5,5,1,0,0,0, + * 4,10,30,34,34,51,10,5,3,1,0,0,0, * 4,10,30,24,45,48,4,2,1,0,0,0,0, - * 2,6,17,23,9,36,32,40,39,29,1,0,0/ + * 2,6,17,23,9,36,32,40,39,29,1,0,0/ data rk1mw140/1.4,6.,0,-7.4,1.6,.133,.2,-.911,-.3,-.2,-.066,0,0, * 1.4,6.,0,-5.8,1.3,-.2,0,-.975,-.2,-.066,0,0,0, * 1.4,6.,0,-3.4,.6,-.3,-.229,-1.,-.2,-.066,0,0,0, @@ -3317,14 +3317,14 @@ C if(z.gt.90)z=90 if((it.eq.1).or.(it.eq.2).or.(it.eq.11).or.(it.eq.12))then if(f.lt.140)then - Call aprok(j1mw70,j2mw70,h1w70,h2w70,R1mw70,R2mw70, - * rk1mw70,rk2mw70,h,z,R1,R2) + Call aprok(j1mw70,j2mw70,h1w70,h2w70,R1mw70,R2mw70, + * rk1mw70,rk2mw70,h,z,R1,R2) R170=R1 R270=R2 endif if(f.gt.70)then - Call aprok(j1mw140,j2mw140,h1w140,h2w140,R1mw140,R2mw140, - * rk1mw140,rk2mw140,h,z,R1,R2) + Call aprok(j1mw140,j2mw140,h1w140,h2w140,R1mw140,R2mw140, + * rk1mw140,rk2mw140,h,z,R1,R2) R1140=R1 R2140=R2 endif @@ -3335,14 +3335,14 @@ C endif if((it.eq.5).or.(it.eq.6).or.(it.eq.7).or.(it.eq.8))then if(f.lt.140)then - Call aprok(j1ms70,j2ms70,h1s70,h2s70,R1ms70,R2ms70, - * rk1ms70,rk2ms70,h,z,R1,R2) + Call aprok(j1ms70,j2ms70,h1s70,h2s70,R1ms70,R2ms70, + * rk1ms70,rk2ms70,h,z,R1,R2) R170=R1 R270=R2 endif if(f.gt.70)then - Call aprok(j1ms140,j2ms140,h1s140,h2s140,R1ms140,R2ms140, - * rk1ms140,rk2ms140,h,z,R1,R2) + Call aprok(j1ms140,j2ms140,h1s140,h2s140,R1ms140,R2ms140, + * rk1ms140,rk2ms140,h,z,R1,R2) R1140=R1 R2140=R2 endif @@ -3353,14 +3353,14 @@ C endif if((it.eq.3).or.(it.eq.4).or.(it.eq.9).or.(it.eq.10))then if(f.lt.140)then - Call aprok(j1mr70,j2mr70,h1r70,h2r70,R1mr70,R2mr70, - * rk1mr70,rk2mr70,h,z,R1,R2) + Call aprok(j1mr70,j2mr70,h1r70,h2r70,R1mr70,R2mr70, + * rk1mr70,rk2mr70,h,z,R1,R2) R170=R1 R270=R2 endif if(f.gt.70)then Call aprok(j1mr140,j2mr140,h1r140,h2r140,R1mr140,R2mr140, - * rk1mr140,rk2mr140,h,z,R1,R2) + * rk1mr140,rk2mr140,h,z,R1,R2) R1140=R1 R2140=R2 endif @@ -3384,11 +3384,11 @@ C c c Subroutine aprok(j1m,j2m,h1,h2,R1m,R2m,rk1m,rk2m,hei,xhi,R1,R2) -c----------------------------------------------------------------- +c----------------------------------------------------------------- dimension zm(7),j1m(7),j2m(7),h1(13,7),h2(13,7),R1m(13,7), * R2m(13,7),rk1m(13,7),rk2m(13,7) data zm/20,40,60,70,80,85,90/ - + h=hei z=xhi @@ -3432,7 +3432,7 @@ c----------------------------------------------------------------- goto 11 endif if(j2.eq.0)then - rk=(z-zm(i1))/(zm(i1+1)-zm(i1)) + rk=(z-zm(i1))/(zm(i1+1)-zm(i1)) R1=R1+(R11-R1)*rk R2=R2+(R12-R2)*rk endif @@ -3441,7 +3441,7 @@ C C SUBROUTINE CALION(INVDIP,MLT,ALT,DDD,PF107,NO,NH,NHE,NN) C---------------------------------------------------------------------- -C Version 2.5 (released 6.4.2016) (Includes a correction for PF107<87.5 +C Version 2.5 (released 6.4.2016) (Includes a correction for PF107<87.5 C based on C/NOFS CINDI data) C CALION calculates ion density of O+, H+, He+ and N+ in the outer C ionosphere with regard to solar activity (F107 index). @@ -3461,15 +3461,15 @@ C Versions: 2.5 FORTRAN C C REFERENCES: C Triskova, L., Truhlik, V., Smilauer, J. An empirical model of ion -C composition in the outer ionosphere. Adv. Space Res. 31 (3), +C composition in the outer ionosphere. Adv. Space Res. 31 (3), C 653–663, 2003. C Truhlik, V., Triskova, L., Smilauer, J. New advances in empirical C modeling of ion composition in the outer ionosphere. Adv. Space C Res. 33, 844–849, 2004. -C Truhlik V., D. Bilitza, L. Triskova, Towards better description of -C solar activity variation in the International Reference Ionosphere -C topside ion composition model, Advances in Space Research, -C Volume 55, Issue 8, 15 April 2015, Pages 2099-2105, ISSN 0273-1177, +C Truhlik V., D. Bilitza, L. Triskova, Towards better description of +C solar activity variation in the International Reference Ionosphere +C topside ion composition model, Advances in Space Research, +C Volume 55, Issue 8, 15 April 2015, Pages 2099-2105, ISSN 0273-1177, C http://dx.doi.org/10.1016/j.asr.2014.07.033. C C Author of the code: @@ -3925,7 +3925,7 @@ C 2250km June solstice & -2.0076E-003, 9.1568E-003,-2.7745E-003, & 9.3070E-004,-1.1010E-003,-2.9865E-004, & -1.0161E-003, 1.0107E-003, 7.9248E-004, - & 4.3800E-003/ + & 4.3800E-003/ C////////////////////////////////////////////////////////////////////// C///////////////////////////////////N+///////////////////////////////// C 550km equinox @@ -4073,7 +4073,7 @@ C 2250km June solstice & -2.3492E-002,-7.9399E-004, 3.7814E-003, & -1.6833E-002/ C////////////////////////////////////////////////////////////////////// -C/////////////////coefficients low solar activity///////////////////// +C/////////////////coefficients low solar activity///////////////////// C//////////////////////////////////O+////////////////////////////////// C 400km equinox DATA (DOL(1,1,J),J=1,49)/ 1.1028E+001,-5.9947E-007,-3.3742E-001, @@ -4698,7 +4698,7 @@ C C/NOFS correction IL=IFIX((PF107-57.5)/10.0) NOCORR=(CORRO(IL+1)-CORRO(IL))/10.0*(PF107-57.5-10*IL)+CORRO(IL) NHCORR=(CORRH(IL+1)-CORRH(IL))/10.0*(PF107-57.5-10*IL)+CORRH(IL) - ENDIF + ENDIF IF (PF107 .GE. 87.5) GOTO 10 NO=NO/NOCORR NH=NH/NHCORR @@ -4710,7 +4710,7 @@ C normalization NH=NH/NTOT NHE=NHE/NTOT NN=NN/NTOT -10 CONTINUE +10 CONTINUE RETURN END C @@ -4721,7 +4721,7 @@ C IONLOW calculates absolute density of O+, H+, He+ or N+ in the outer C ionosphere for a low solar activity (F107 < 100). C Based on spherical harmonics approximation of relative ion density C (by AE-C, and AE-E) at altitudes centred on 400km, 550km, 750km, and 1000km. -C For intermediate altitudes an interpolation is used. +C For intermediate altitudes an interpolation is used. C Recommended altitude range: 350-2500 km!!! C For days between seasons centred at (21.3. = 79; 21.6. = 171; C 23.9. 265; 21.12. = 354) relative ion density is linearly interpolated. @@ -4735,7 +4735,7 @@ C in km, range <350;2000> C DDD - day of year; range <0;365> C D - coefficints of spherical harmonics for a given ion C ION - ion species (0...O+, 1...H+, 2...He+, 3...N+) -C Output: NION - absolute density for given ion +C Output: NION - absolute density for given ion C--------------------------------------------------------------------------- REAL INVDIP,MLT,ALT,NION INTEGER DDD,ION @@ -4849,12 +4849,12 @@ C n(O+) AND n(N+) must not increase above 750km IF (((ION .EQ. 0) .OR. (ION .EQ. 3)) .AND. (N1000 .GT. N750)) & N1000=N750 C n(H+) and n(He+) must not decrease above 750km - IF (((ION .EQ. 1) .OR. (ION .EQ. 2)) .AND. (N1000 .LT. N750)) + IF (((ION .EQ. 1) .OR. (ION .EQ. 2)) .AND. (N1000 .LT. N750)) & N1000=N750 - IF (ALT .GE. 960) SUM=(N1000-N750)/220.0*(ALT-740.0)+N750 + IF (ALT .GE. 960) SUM=(N1000-N750)/220.0*(ALT-740.0)+N750 IF (ALT .GE. 960) GOTO 240 - + ANO(1)=N400 ANO(2)=N550 ANO(3)=N750 @@ -4883,16 +4883,16 @@ C exact values 220 ST(I)=(ANO(I+1)-ANO(I))/(AH(I+1)-AH(I)) c ARGMAX=88.0 - SUM=ANO(1)+ST(1)*(ALT-AH(1)) - + SUM=ANO(1)+ST(1)*(ALT-AH(1)) + DO 230 I=1,2 aa = eptr(alt ,dno(i),ah(i+1)) bb = eptr(ah(1),dno(i),ah(i+1)) 230 SUM=SUM+(ST(I+1)-ST(I))*(AA-BB)*DNO(I) - -240 NION=10**SUM + +240 NION=10**SUM RETURN - END + END C C SUBROUTINE IONHIGH(INVDIP,MLT,ALT,DDD,D,ION,NION) @@ -4901,7 +4901,7 @@ C IONHIGH calculates absolute density of O+, H+, He+ or N+ in the outer C ionosphere for high solar activity conditions (PF10.7 = 210). C Based on spherical harmonics approximation of relative ion density C (by IK24) at altitudes centred on 550km, 900km, 1500km, and 2250km. -C For intermediate altitudes a interpolation is used. +C For intermediate altitudes a interpolation is used. C Recommended altitude range: 500-2500 km!!! C For days between seasons centred at (21.3. = 79; 21.6. = 171; C 23.9. 265; 21.12. = 354) relative ion density is linearly interpolated. @@ -4915,7 +4915,7 @@ C in km, range <500;3000> C DDD - day of year; range <0;365> C D - coefficints of spherical harmonics for a given ion C ION - ion species (0...O+, 1...H+, 2...He+, 3...N+) -C Output: NION - absolute density for given ion +C Output: NION - absolute density for given ion C--------------------------------------------------------------------------- REAL INVDIP,MLT,ALT,NION INTEGER DDD,ION @@ -4942,7 +4942,7 @@ C coefficients for mirroring D(3,3,I)=D(3,2,I)*MIRREQ(I) 10 D(4,3,I)=D(4,2,I)*MIRREQ(I) INVDP=INVDIP - + RMLT=MLT*DTOR*15.0 RCOLAT=(90.0-INVDP)*DTOR CALL SPHARM_IK(C1,6,6,RCOLAT,RMLT) @@ -5025,16 +5025,16 @@ C 2500km level N250B=N0B250 N2500=(N250B-N250A)/(DDDB-DDDA)*(DDDD-DDDA)+N250A -C O+ and N+ may not increase above 1500km - IF (((ION .EQ. 0) .OR. (ION .EQ. 3)) .AND. (N2500 .GT. N1500)) +C O+ and N+ may not increase above 1500km + IF (((ION .EQ. 0) .OR. (ION .EQ. 3)) .AND. (N2500 .GT. N1500)) & N2500=N1500 -C H+ and He+ may not decrease above 1500km - IF (((ION .EQ. 1) .OR. (ION .EQ. 2)) .AND. (N2500 .LT. N1500)) +C H+ and He+ may not decrease above 1500km + IF (((ION .EQ. 1) .OR. (ION .EQ. 2)) .AND. (N2500 .LT. N1500)) & N2500=N1500 - + IF (ALT .GE. 2250.0) SUM=(N2500-N1500)/750.0*(ALT-2250.0)+N2500 IF (ALT .GE. 2250.0) GOTO 240 - + ANO(1)=N550 ANO(2)=N900 ANO(3)=N1500 @@ -5057,29 +5057,29 @@ C H+ and He+ may not decrease above 1500km 220 ST(I)=(ANO(I+1)-ANO(I))/(AH(I+1)-AH(I)) c ARGMAX=88.0 - SUM=ANO(1)+ST(1)*(ALT-AH(1)) - + SUM=ANO(1)+ST(1)*(ALT-AH(1)) + DO 230 I=1,2 aa = eptr(alt ,dno(i),ah(i+1)) bb = eptr(ah(1),dno(i),ah(i+1)) 230 SUM=SUM+(ST(I+1)-ST(I))*(AA-BB)*DNO(I) - -240 NION=10**SUM + +240 NION=10**SUM RETURN END C C REAL FUNCTION INVDPC(FL,DIMO,B0,DIPL) C--------------------------------------------------------------------------- -C INPUT: FL McIlwain L parameter, +C INPUT: FL McIlwain L parameter, C DIMO dipole moment in Gauss -C B0 magnetic field strength in Gauss +C B0 magnetic field strength in Gauss C parameters FL, DIMO and B0 are needed for invariant latitude C computation; uses a highly accurate polynomial expansion C DIPL dip latitude in degree C positive northward, in deg, range <-90.0;90.0> -C RESULT: invdip a "mix" coordinate of the dip latitude (DIPL) and -C of the invariant latitude; INVDIP is positive northward +C RESULT: invdip a "mix" coordinate of the dip latitude (DIPL) and +C of the invariant latitude; INVDIP is positive northward C in degree and ranges from -90.0 to 90.0. C--------------------------------------------------------------------------- REAL FL,DIMO,B0,DIPL,DTOR,ASA,INVL,RINVL,RDIPL,ALFA,BETA @@ -5104,7 +5104,7 @@ c INVDPC=(ALFA*INVL+BETA*DIPL)/(ALFA+BETA) RETURN END C -C +C REAL FUNCTION INVDPC_OLD(FL,DIMO,B0,DIPL) C--------------------------------------------------------------------------- C calculation of INVDIP from FL, DIMO, BO, and DIPL @@ -5133,17 +5133,17 @@ c invariant latitude (absolute value) END C -C -C************************************************************* -C************* PEAK VALUES ELECTRON DENSITY ****************** -C************************************************************* +C +C************************************************************* +C************* PEAK VALUES ELECTRON DENSITY ****************** +C************************************************************* C C real function FOUT(XMODIP,XLATI,XLONGI,UT,FF0) c-------------------------------------------------------------- -C CALCULATES CRITICAL FREQUENCY FOF2/MHZ USING SUBROUTINE GAMMA1. +C CALCULATES CRITICAL FREQUENCY FOF2/MHZ USING SUBROUTINE GAMMA1. C XMODIP = MODIFIED DIP LATITUDE, XLATI = GEOG. LATITUDE, XLONGI= -C LONGITUDE (ALL IN DEG.), MONTH = MONTH, UT = UNIVERSAL TIME +C LONGITUDE (ALL IN DEG.), MONTH = MONTH, UT = UNIVERSAL TIME C (DEC. HOURS), FF0 = ARRAY WITH RZ12-ADJUSTED CCIR/URSI COEFF. C D.BILITZA,JULY 85. c-------------------------------------------------------------- @@ -5159,7 +5159,7 @@ C c-------------------------------------------------------------- C CALCULATES PROPAGATION FACTOR M3000 USING THE SUBROUTINE GAMMA1. C XMODIP = MODIFIED DIP LATITUDE, XLATI = GEOG. LATITUDE, XLONGI= -C LONGITUDE (ALL IN DEG.), MONTH = MONTH, UT = UNIVERSAL TIME +C LONGITUDE (ALL IN DEG.), MONTH = MONTH, UT = UNIVERSAL TIME C (DEC. HOURS), XM0 = ARRAY WITH RZ12-ADJUSTED CCIR/URSI COEFF. C D.BILITZA,JULY 85. c-------------------------------------------------------------- @@ -5171,62 +5171,62 @@ c-------------------------------------------------------------- END C C - REAL FUNCTION HMF2ED(XMAGBR,R,X,XM3) + REAL FUNCTION HMF2ED(XMAGBR,R,X,XM3) c-------------------------------------------------------------- -C CALCULATES THE PEAK HEIGHT HMF2/KM FOR THE MAGNETIC -C LATITUDE XMAGBR/DEGREE AND THE SMOOTHED ZUERICH SUNSPOT +C CALCULATES THE PEAK HEIGHT HMF2/KM FOR THE MAGNETIC +C LATITUDE XMAGBR/DEGREE AND THE SMOOTHED ZUERICH SUNSPOT C NUMBER R USING CCIR-M3000 XM3 AND THE RATIO X=FOF2/FOE. C FOLLOWING CCIR RECOMMENDATION X IS LIMITED TO VALUE -C GREATER OR EQUAL TO 1.7 . -C [REF. D.BILITZA ET AL., TELECOMM.J., 46, 549-553, 1979] -C D.BILITZA,1980. +C GREATER OR EQUAL TO 1.7 . +C [REF. D.BILITZA ET AL., TELECOMM.J., 46, 549-553, 1979] +C D.BILITZA,1980. c-------------------------------------------------------------- - F1=0.00232*R+0.222 - F2=1.2-0.0116*EXP(0.0239*R) - F3=0.096*(R-25.0)/150.0 + F1=0.00232*R+0.222 + F2=1.2-0.0116*EXP(0.0239*R) + F3=0.096*(R-25.0)/150.0 F4=1.0-R/150.0*EXP(-XMAGBR*XMAGBR/1600.0) if(x.lt.1.7) x=1.7 - DELM=F1*F4/(X-F2)+F3 - HMF2ED=1490.0/(XM3+DELM)-176.0 - RETURN - END + DELM=F1*F4/(X-F2)+F3 + HMF2ED=1490.0/(XM3+DELM)-176.0 + RETURN + END C C - REAL FUNCTION XM3000HM(XMAGBR,R,X,HMF2) + REAL FUNCTION XM3000HM(XMAGBR,R,X,HMF2) c-------------------------------------------------------------- C CALCULATES THE PROPAGATION FACTOR M3000 FOR THE MAGNETIC LATITUDE -C XMAGBR/DEG. AND THE SMOOTHED ZUERICH SUNSPOT NUMBER R USING THE -C PEAK HEIGHT HMF2/KM AND THE RATIO X=FOF2/FOE. Reverse of HMF2ED. -C [REF. D.BILITZA ET AL., TELECOMM.J., 46, 549-553, 1979] -C D.BILITZA,1980. ----- no longer used +C XMAGBR/DEG. AND THE SMOOTHED ZUERICH SUNSPOT NUMBER R USING THE +C PEAK HEIGHT HMF2/KM AND THE RATIO X=FOF2/FOE. Reverse of HMF2ED. +C [REF. D.BILITZA ET AL., TELECOMM.J., 46, 549-553, 1979] +C D.BILITZA,1980. ----- no longer used c-------------------------------------------------------------- - F1=0.00232*R+0.222 - F2=1.2-0.0116*EXP(0.0239*R) - F3=0.096*(R-25.0)/150.0 + F1=0.00232*R+0.222 + F2=1.2-0.0116*EXP(0.0239*R) + F3=0.096*(R-25.0)/150.0 F4=1.0-R/150.0*EXP(-XMAGBR*XMAGBR/1600.0) if(x.lt.1.7) x=1.7 - DELM=F1*F4/(X-F2)+F3 + DELM=F1*F4/(X-F2)+F3 XM3000HM=1490.0/(HMF2+176.0)-DELM - RETURN - END + RETURN + END C C SUBROUTINE SHAMDHMF2 (RLAT,FLON,T,RZ,HMF2) C------------------------------------------------------------------- C COMPUTES THE HOURLY VALUES OF hmF2 FROM A SET OF SH COEFFICIENTS -C IN A POINT OF A GIVEN GEOCENTRIC LATITUDE AND LONGITUDE OF THE +C IN A POINT OF A GIVEN GEOCENTRIC LATITUDE AND LONGITUDE OF THE C EARTH'S SURFACE FOR A GIVEN MONTH AND A GIVEN SUNSPOT NUMBER. C PARAMETERS AND COEFFICIENTS ARE GIVEN IN DATA STATEMENTS. C -C INPUT: RLAT The geographic latitude on the FLON meridian -C where the modified dip latitude is equal to the +C INPUT: RLAT The geographic latitude on the FLON meridian +C where the modified dip latitude is equal to the C modip value for the considered point in space. C FLON =LONGITUDE+15.*UT(hours) C T Month as a REAL number (1.0 to 12.0) C RZ 12-month running mean C OUTPUT: HMF2 F2 peak altitude in km C -C Altadill, D., S. Magdaleno, J.M. Torta, and E. Blanch +C Altadill, D., S. Magdaleno, J.M. Torta, and E. Blanch C Adv. Space Res. 52, 1756-1769, 2013. C------------------------------------------------------------------- PARAMETER (IBO=0,JBO=1,KDIM=8,LDIM=4,L=-1) @@ -5239,7 +5239,7 @@ C------------------------------------------------------------------- * HBNM(0:KDIM,0:KDIM,1-IBO-JBO:LDIM) DIMENSION BINT(0:KDIM,0:KDIM,1-IBO-JBO:LDIM), * BEXT(0:KDIM,0:KDIM,1-IBO-JBO:LDIM) - CHARACTER*1 IE + CHARACTER*1 IE COMMON/AMTB/BINT,BEXT,RE,TZERO,IFIT,IB,KINT,LINT,KEXT, * LEXT,KMAX,FN c ,CONST @@ -5367,7 +5367,7 @@ c ,CONST * -51.003, 0.485, 36.183, 0.144, * 65.647,-0.752, -42.617,-0.228, 33.590,-0.298, -27.554,-0.093, * -15.194, 0.193, 20.247, 0.033, 14.304,-0.227, -6.789,-0.088, - * 80*0.000/ + * 80*0.000/ KMAX = MAX(KINT,KEXT) IF (KMAX .GT. KDIM) GO TO 9999 @@ -5381,7 +5381,7 @@ c ,CONST GNM(N,M,J)=GANM(N,M,J)+GBNM(N,M,J)*rz HNM(N,M,J)=HANM(N,M,J)+HBNM(N,M,J)*rz ENDDO - + IF (IE .EQ. 'I') THEN IF (N .GT. KINT) GO TO 500 LJ = LINT @@ -5414,7 +5414,7 @@ c ,CONST C 500 CONTINUE C ********************************************************** -C SYNTHESIZES THE VALUE OF HMF2 FROM THE MODEL +C SYNTHESIZES THE VALUE OF HMF2 FROM THE MODEL C ********************************************************** CALL SCHNEVPDH (RZ,RLAT,FLON,dum,T,L,dum,dum,HMF2) RETURN @@ -5450,11 +5450,11 @@ C SUBROUTINE USED: LEGFUN C C PARAMS & COEFFS TRANSFERRED FROM MAIN PROGRAM IN COMMON/AMTB/ C -C ADAPTED FROM SUBROUTINE SCHNEV OF G.V. HAINES (COMPUTERS & GEOSCIENCES, +C ADAPTED FROM SUBROUTINE SCHNEV OF G.V. HAINES (COMPUTERS & GEOSCIENCES, C 14, 413-447, 1988) C------------------------------------------------------------------------ - PARAMETER (IBO=0,JBO=1,KDIM=8,LDIM=4) + PARAMETER (IBO=0,JBO=1,KDIM=8,LDIM=4) DIMENSION FN(0:KDIM,0:KDIM), CONSTP(0:KDIM,0:KDIM) DIMENSION CML(KDIM), SML(KDIM) DIMENSION DELT(0:LDIM) @@ -5479,10 +5479,10 @@ C 2 FOURIER SERIES C 3 COSINE SERIES C 4 SINE SERIES C NOTE: TZERO AND THINT MAY DEPEND ON IBF. - IBF = 2 + IBF = 2 T1=1. T2=12. - CALL TBFIT (T1,T2,IBF,THINT,TZERO) + CALL TBFIT (T1,T2,IBF,THINT,TZERO) C IF (L .NE. 0) GO TO 100 C BN = FLATO @@ -5697,7 +5697,7 @@ c c Requires the following subroutines and functions: c SDMF2, hmF2_med_SD, read_data_SD, fun_hmF2_SD, c fun_Gk, Legendre, fun_hmF2UT, Koeff_UT, fun_Akp_UT, -c fun_Fk_UT, fun_Gk_UT +c fun_Fk_UT, fun_Gk_UT c c Author of the code: c Valentin Shubin @@ -5705,7 +5705,7 @@ c Pushkov Institute of Terrestrial Magnetism, c Ionosphere and Radio wave propagation (IZMIRAN) c Moscow, Troitsk, 142190, Russia c e-mail: shubin@izmiran.ru -c +c c [Ref. V.N. Shubin. Global median model of the F2-layer c peak height based on ionospheric radio-occultation and c ground-based Digisonde observations. Advances in Space Research (2015) @@ -5716,7 +5716,7 @@ c UT - universal time (real) c monthut - month (integer) c xmodip - modified dip latitude in degrees (real) c long - geodatic longitude in degrees (real) -c F107A - F10.7 index averaged over the 3 Sun rotations +c F107A - F10.7 index averaged over the 3 Sun rotations c in units of 10^-22 W/(m^2 Hz) (real) c c Output: @@ -5744,9 +5744,9 @@ c hmF2_UT(i) = hmF2_med_SD(i,monthut,F107A,xmodip,long) xUT(i) = dble(i) end do -c +c T = dble(UT) - hmF2 = fun_hmF2UT(T) + hmF2 = fun_hmF2UT(T) c return end @@ -5754,10 +5754,10 @@ c c real function hmF2_med_SD(iUT,monthut,F107A,xmodip,long) c--------------------------------------------------------------------- -c Input: +c Input: c iUT - universal time (real) c monthut - month (integer) -c F107A - F10.7 index averaged over the 3 Sun rotations +c F107A - F10.7 index averaged over the 3 Sun rotations c in units of 10^-22 W/(m^2 Hz) (real) c xmodip - modified dip latitude in degrees (real) c long - geodatic longitude in degrees (real) @@ -5783,7 +5783,7 @@ c .. local arrays .. c c Arrays ft1 (12) and ft2 (12) are the median values of F10.7A, c which were used as the margins for -c the low and high solar activity levels +c the low and high solar activity levels c c Jan Feb Mar Apr May Jun data ft1/ 73.6, 72.3, 71.8, 70.9, 73.6,73.0, @@ -5810,9 +5810,9 @@ c hmF2_2 = fun_hmF2_SD(teta,long,Kf) c cov = F107A - cov1 = ft1(monthut) + cov1 = ft1(monthut) cov2 = ft2(monthut) -c +c a = (hmF2_2 - hmF2_1)/log(cov2/cov1) b = hmF2_2 - a*log(cov2) hmF2_med_SD = a*log(cov) + b @@ -5851,31 +5851,31 @@ c coeff_month_read(month) = 1 end if c - coeff_month = coeff_month_all(0:148,0:47,month) + coeff_month = coeff_month_all(0:148,0:47,month) c c Previous operator can be replaced by c c do i=0,148 -c do j=0,47 +c do j=0,47 c coeff_month(i,j) = coeff_month_all(i,j,month) c end do -c end do +c end do c return - + 10 format('mcsat',i2,'.dat') c-web- special for web version c10 FORMAT('/var/www/omniweb/cgi/vitmo/IRI/mcsat',I2,'.dat') 20 format(6(d12.5)) end c -c +c real function fun_hmF2_SD(teta,long,Kf) c--------------------------------------------------------------------- -c Input: +c Input: c teta - (90-modip) in degrees c long - geodatic longitude in degrees -c Kf - coefficients of hmF2 spatial decomposition +c Kf - coefficients of hmF2 spatial decomposition c c function to calculate spherical harmonics decomposition c for the spatial dependencies of hmF2 @@ -5899,7 +5899,7 @@ c call fun_Gk(teta,long,Gk) hmF2 = 0.d0 do k=0,148 - hmF2 = hmF2 + Kf(k)*Gk(k) + hmF2 = hmF2 + Kf(k)*Gk(k) end do fun_hmF2_SD = hmF2 c @@ -5939,7 +5939,7 @@ c Gk(k) = Pl_mn(m,n) k = k + 1 end do - else + else do n=m,nn Gk(k) = Pl_mn(m,n)*cos(m*long*umr) Gk(k+1) = Pl_mn(m,n)*sin(m*long*umr) @@ -5956,10 +5956,10 @@ c c--------------------------------------------------------------------- c Input: c mm - harmonics for longitude -c nn - harmonics for the modified dip latitude (modip) +c nn - harmonics for the modified dip latitude (modip) c teta - (90-modip) in degrees c Output: -c P(mm,nn) - associated Legendre function +c P(mm,nn) - associated Legendre function c c subroutine to calculate associated Legendre function P(mm,nn) c with Schmidt normalization @@ -6025,8 +6025,8 @@ c c real function fun_hmF2UT(T) c--------------------------------------------------------------------- -c Input: T - universal time -c +c Input: T - universal time +c c function to calculate Fourier decomposition c for the temporal variations of hmF2 c used the following auxiliary subroutines: @@ -6039,9 +6039,9 @@ c .. local scalars .. integer k, mm, mk c real dtr, dumr double precision hmF2 -c .. local arrays .. +c .. local arrays .. double precision Gk_UT(0:6), Kf_UT(0:6) -c .. local in common .. +c .. local in common .. double precision dtr common/radUT/dtr c common/const1/dtr,dumr @@ -6056,7 +6056,7 @@ c call fun_Gk_UT(mm,mk,t,Gk_UT) hmF2 = 0.d0 do k=0,mk - hmF2 = hmF2 + Kf_UT(k)*Gk_UT(k) + hmF2 = hmF2 + Kf_UT(k)*Gk_UT(k) end do fun_hmF2UT = hmF2 c @@ -6078,7 +6078,7 @@ c .. local arrays .. double precision Akp_UT(0:mk,0:mk) double precision Dk_UT(0:mk) c .. subroutine references .. -c fun_Akp_UT +c fun_Akp_UT c call fun_Akp_UT(mm,mk,Akp_UT,Dk_UT) Kf_UT = 0.d0 @@ -6088,7 +6088,7 @@ c sum_D = sum_D + Akp_UT(m,k)*Kf_UT(m) end do Kf_UT(k) = sum_D + Dk_UT(k) - end do + end do return end @@ -6108,7 +6108,7 @@ c .. local scalars .. double precision sum_Ad, sum_Dd c .. local arrays .. double precision Gk_UT(0:mk), Fk_UT(0:mk) -c .. array in common .. +c .. array in common .. double precision hmF2_UT(0:23) common/hmF2UT/hmF2_UT c .. subroutine references .. @@ -6209,7 +6209,7 @@ c if (m.eq.0) then Gk_UT(k) = 1 k = k + 1 - else + else Gk_UT(k) = cos(m*t*dtr) Gk_UT(k+1) = sin(m*t*dtr) k = k + 2 @@ -6223,22 +6223,22 @@ C REAL FUNCTION FOF1ED(YLATI,R,CHI) c-------------------------------------------------------------- C CALCULATES THE F1 PEAK PLASMA FREQUENCY (FOF1/MHZ) -C INPUT: +C INPUT: C YLATI ABSOLUT VALUE OF DIP-LATITUDE IN DEGREE -c R 12-MONTH RUNNING MEAN OF SUNSPOT NUMBER +c R 12-MONTH RUNNING MEAN OF SUNSPOT NUMBER c CHI SOLAR ZENITH ANGLE IN DEGREE -C REFERENCE: +C REFERENCE: c E.D.DUCHARME ET AL., RADIO SCIENCE 6, 369-378, 1971 C AND 8, 837-839, 1973 c HOWEVER WITH MAGNETIC DIP LATITUDE INSTEAD OF GEOMAGNETIC -c DIPOLE LATITUDE, EYFRIG, 1979 -C--------------------------------------------- D. BILITZA, 1988. +c DIPOLE LATITUDE, EYFRIG, 1979 +C--------------------------------------------- D. BILITZA, 1988. COMMON/CONST/UMR,PI fof1ed=0.0 if (chi.gt.90.0) return DLA = YLATI - F0 = 4.35 + DLA * ( 0.0058 - 1.2E-4 * DLA ) + F0 = 4.35 + DLA * ( 0.0058 - 1.2E-4 * DLA ) F100 = 5.348 + DLA * ( 0.011 - 2.3E-4 * DLA ) FS = F0 + ( F100 - F0 ) * R / 100.0 XMUE = 0.093 + DLA * ( 0.0046 - 5.4E-5 * DLA ) + 3.0E-4 * R @@ -6246,10 +6246,10 @@ C--------------------------------------------- D. BILITZA, 1988. CHI0 = 49.84733 + 0.349504 * DLA CHI100 = 38.96113 + 0.509932 * DLA CHIM = ( CHI0 + ( CHI100 - CHI0 ) * R / 100. ) - IF(CHI.GT.CHIM) FOF1=-FOF1 - FOF1ED = FOF1 + IF(CHI.GT.CHIM) FOF1=-FOF1 + FOF1ED = FOF1 RETURN - END + END C C real function f1_c1(xmodip,hour,saxnon,suxnon) @@ -6258,7 +6258,7 @@ c Space Research, Volume 25, Number 1, 81-88, 2000. common /const/umr,pi pi = umr * 180. - + ABSMDP=ABS(XMODIP) DELA=4.32 IF(ABSMDP.GE.18.) DELA=1.0+EXP(-(ABSMDP-30.0)/10.0) @@ -6280,10 +6280,10 @@ c-------------------------------------------------------------------------- c Occurrence probability of F1 layer after Scotto et al., Advances in c Space Research, Volume 20, Number 9, 1773-1775, 1997. c -c Input: sza solar zenith angle in degrees +c Input: sza solar zenith angle in degrees c glat geomagnetic latitude in degrees C rz12 12-month running mean of sunspot number -c Output: f1prob F1 occurrence probability without L-condition cases +c Output: f1prob F1 occurrence probability without L-condition cases c f1probl F1 occurrence probability with L-condition cases c-------------------------------------------------------------------------- c @@ -6306,57 +6306,57 @@ C C REAL FUNCTION FOEEDI(COV,XHI,XHIM,XLATI) C------------------------------------------------------- -C CALCULATES FOE/MHZ BY THE EDINBURGH-METHOD. -C INPUT: -C COV MONTHLY MEAN 10.7CM SOLAR RADIO FLUX measured at -C ground level -C XHI SOLAR ZENITH ANGLE IN DEGREE +C CALCULATES FOE/MHZ BY THE EDINBURGH-METHOD. +C INPUT: +C COV MONTHLY MEAN 10.7CM SOLAR RADIO FLUX measured at +C ground level +C XHI SOLAR ZENITH ANGLE IN DEGREE C XHIM SOLAR ZENITH ANGLE AT NOON IN DEGREE -C XLATI ABSOLUTE VALUE OF GEOGRAPHIC LATITUDE IN DEGREE, -C REFERENCE: +C XLATI ABSOLUTE VALUE OF GEOGRAPHIC LATITUDE IN DEGREE, +C REFERENCE: C KOURIS-MUGGELETON, CCIR DOC. 6/3/07, 1973 C TROST, J. GEOPHYS. RES. 84, 2736, 1979 (was used C to improve the nighttime varition) C RAWER AND BILITZA, Adv. Space Res. 10(8), 5-14, 1990 -C D.BILITZA--------------------------------- AUGUST 1986. +C D.BILITZA--------------------------------- AUGUST 1986. COMMON/CONST/UMR,PI C variation with solar activity (factor A) ............... - A=1.0+0.0094*(COV-66.0) + A=1.0+0.0094*(COV-66.0) C variation with noon solar zenith angle (B) and with latitude (C) SL=COS(XLATI*UMR) IF(XLATI.LT.32.0) THEN - SM=-1.93+1.92*SL - C=23.0+116.0*SL + SM=-1.93+1.92*SL + C=23.0+116.0*SL ELSE - SM=0.11-0.49*SL - C=92.0+35.0*SL + SM=0.11-0.49*SL + C=92.0+35.0*SL ENDIF if(XHIM.ge.90.) XHIM=89.999 B = COS(XHIM*UMR) ** SM -C variation with solar zenith angle (D) .......................... +C variation with solar zenith angle (D) .......................... IF(XLATI.GT.12.0) THEN SP=1.2 ELSE - SP=1.31 + SP=1.31 ENDIF C adjusted solar zenith angle during nighttime (XHIC) ............. - XHIC=XHI-3.*ALOG(1.+EXP((XHI-89.98)/3.)) - D=COS(XHIC*UMR)**SP + XHIC=XHI-3.*ALOG(1.+EXP((XHI-89.98)/3.)) + D=COS(XHIC*UMR)**SP C determine foE**4 ................................................ - R4FOE=A*B*C*D + R4FOE=A*B*C*D C minimum allowable foE (foe_min=sqrt[SMIN])............................... SMIN=0.121+0.0015*(COV-60.) SMIN=SMIN*SMIN - IF(R4FOE.LT.SMIN) R4FOE=SMIN - FOEEDI=R4FOE**0.25 - RETURN - END + IF(R4FOE.LT.SMIN) R4FOE=SMIN + FOEEDI=R4FOE**0.25 + RETURN + END C C - REAL FUNCTION XMDED(XHI,R,YW) -C D. BILITZA, 1978, CALCULATES ELECTRON DENSITY OF D MAXIMUM. -C XHI/DEG. IS SOLAR ZENITH ANGLE, R SMOOTHED ZURICH SUNSPOT NUMBER -C AND YW/M-3 THE ASSUMED CONSTANT NIGHT VALUE. + REAL FUNCTION XMDED(XHI,R,YW) +C D. BILITZA, 1978, CALCULATES ELECTRON DENSITY OF D MAXIMUM. +C XHI/DEG. IS SOLAR ZENITH ANGLE, R SMOOTHED ZURICH SUNSPOT NUMBER +C AND YW/M-3 THE ASSUMED CONSTANT NIGHT VALUE. C [REF.: D.BILITZA, WORLD DATA CENTER A REPORT UAG-82,7,BOULDER,1981] C corrected 4/25/97 - D. Bilitza c @@ -6365,128 +6365,128 @@ c if(xhi.ge.90) goto 100 Y = 6.05E8 + 0.088E8 * R yy = cos ( xhi * umr ) - yyy = -0.1 / ( yy**2.7 ) - if (yyy.lt.-40.) then + yyy = -0.1 / ( yy**2.7 ) + if (yyy.lt.-40.) then ymd=0.0 else ymd = y * exp(yyy) endif if (ymd.lt.yw) ymd = yw xmded=ymd - RETURN + RETURN -100 XMDED=YW - RETURN +100 XMDED=YW + RETURN END C C REAL FUNCTION GAMMA1(SMODIP,SLAT,SLONG,HOUR, - & IHARM,NQ,K1,M,MM,M3,SFE) + & IHARM,NQ,K1,M,MM,M3,SFE) C--------------------------------------------------------------- -C CALCULATES GAMMA1=FOF2 OR M3000 USING CCIR NUMERICAL MAP +C CALCULATES GAMMA1=FOF2 OR M3000 USING CCIR NUMERICAL MAP C COEFFICIENTS SFE(M3) FOR MODIFIED DIP LATITUDE (SMODIP/DEG) -C GEOGRAPHIC LATITUDE (SLAT/DEG) AND LONGITUDE (SLONG/DEG) +C GEOGRAPHIC LATITUDE (SLAT/DEG) AND LONGITUDE (SLONG/DEG) C AND UNIVERSIAL TIME (HOUR/DECIMAL HOURS). IHARM IS THE MAXIMUM C NUMBER OF HARMONICS USED FOR DESCRIBING DIURNAL VARIATION. -C NQ(K1) IS AN INTEGER ARRAY GIVING THE HIGHEST DEGREES IN -C LATITUDE FOR EACH LONGITUDE HARMONIC WHERE K1 GIVES THE NUMBER -C OF LONGITUDE HARMONICS. M IS THE NUMBER OF COEFFICIENTS FOR +C NQ(K1) IS AN INTEGER ARRAY GIVING THE HIGHEST DEGREES IN +C LATITUDE FOR EACH LONGITUDE HARMONIC WHERE K1 GIVES THE NUMBER +C OF LONGITUDE HARMONICS. M IS THE NUMBER OF COEFFICIENTS FOR C DESCRIBING VARIATIONS WITH SMODIP, SLAT, AND SLONG. MM IS THE C NUMBER OF COEFFICIENTS FOR THE FOURIER TIME SERIES DESCRIBING C VARIATIONS WITH UT. -C M=1+NQ(1)+2*[NQ(2)+1]+2*[NQ(3)+1]+... , MM=2*IHARM+1, M3=M*MM -C SHEIKH,4.3.77. +C M=1+NQ(1)+2*[NQ(2)+1]+2*[NQ(3)+1]+... , MM=2*IHARM+1, M3=M*MM +C SHEIKH,4.3.77. C--------------------------------------------------------------- - REAL*8 C(12),S(12),COEF(100),SUM - DIMENSION NQ(K1),XSINX(13),SFE(M3) + REAL*8 C(12),S(12),COEF(100),SUM + DIMENSION NQ(K1),XSINX(13),SFE(M3) COMMON/CONST/UMR,PI - HOU=(15.0*HOUR-180.0)*UMR - S(1)=SIN(HOU) - C(1)=COS(HOU) - - DO 250 I=2,IHARM - C(I)=C(1)*C(I-1)-S(1)*S(I-1) - S(I)=C(1)*S(I-1)+S(1)*C(I-1) -250 CONTINUE - - DO 300 I=1,M - MI=(I-1)*MM - COEF(I)=SFE(MI+1) - DO 300 J=1,IHARM - COEF(I)=COEF(I)+SFE(MI+2*J)*S(J)+SFE(MI+2*J+1)*C(J) -300 CONTINUE - - SUM=COEF(1) - SS=SIN(SMODIP*UMR) - S3=SS - XSINX(1)=1.0 - INDEX=NQ(1) - - DO 350 J=1,INDEX - SUM=SUM+COEF(1+J)*SS - XSINX(J+1)=SS - SS=SS*S3 -350 CONTINUE - - XSINX(NQ(1)+2)=SS - NP=NQ(1)+1 - SS=COS(SLAT*UMR) - S3=SS - - DO 400 J=2,K1 - S0=SLONG*(J-1.)*UMR - S1=COS(S0) - S2=SIN(S0) - INDEX=NQ(J)+1 - DO 450 L=1,INDEX - NP=NP+1 - SUM=SUM+COEF(NP)*XSINX(L)*SS*S1 - NP=NP+1 - SUM=SUM+COEF(NP)*XSINX(L)*SS*S2 -450 CONTINUE - SS=SS*S3 + HOU=(15.0*HOUR-180.0)*UMR + S(1)=SIN(HOU) + C(1)=COS(HOU) + + DO 250 I=2,IHARM + C(I)=C(1)*C(I-1)-S(1)*S(I-1) + S(I)=C(1)*S(I-1)+S(1)*C(I-1) +250 CONTINUE + + DO 300 I=1,M + MI=(I-1)*MM + COEF(I)=SFE(MI+1) + DO 300 J=1,IHARM + COEF(I)=COEF(I)+SFE(MI+2*J)*S(J)+SFE(MI+2*J+1)*C(J) +300 CONTINUE + + SUM=COEF(1) + SS=SIN(SMODIP*UMR) + S3=SS + XSINX(1)=1.0 + INDEX=NQ(1) + + DO 350 J=1,INDEX + SUM=SUM+COEF(1+J)*SS + XSINX(J+1)=SS + SS=SS*S3 +350 CONTINUE + + XSINX(NQ(1)+2)=SS + NP=NQ(1)+1 + SS=COS(SLAT*UMR) + S3=SS + + DO 400 J=2,K1 + S0=SLONG*(J-1.)*UMR + S1=COS(S0) + S2=SIN(S0) + INDEX=NQ(J)+1 + DO 450 L=1,INDEX + NP=NP+1 + SUM=SUM+COEF(NP)*XSINX(L)*SS*S1 + NP=NP+1 + SUM=SUM+COEF(NP)*XSINX(L)*SS*S2 +450 CONTINUE + SS=SS*S3 400 CONTINUE - - GAMMA1=SUM - RETURN - END + GAMMA1=SUM + + RETURN + END C -C -C************************************************************ -C***************** PROFILE PARAMETERS *********************** -C************************************************************ +C +C************************************************************ +C***************** PROFILE PARAMETERS *********************** +C************************************************************ C C SUBROUTINE TOPH05(COVI,AMLAT,TIME,HMAX,HT05,SG) C--------------------------------------------------------------------------------- -C Gulyaeva T.L. (2003) Variations in the half-width of the topside ionosphere +C Gulyaeva T.L. (2003) Variations in the half-width of the topside ionosphere C according to the observations by space ionosondes ISIS 1,ISIS 2, and IK19. C International J. of Geomagnetism and Aeronomy, 4(3), 201-207. -C Gulyaeva T.L., Titheridge J.E. (2006) Advanced specification of electron density -C and temperature in the IRI ionosphere-plasmasphere model. +C Gulyaeva T.L., Titheridge J.E. (2006) Advanced specification of electron density +C and temperature in the IRI ionosphere-plasmasphere model. C Adv. Space Res. 38(11), 2587-2595, doi:10.1016/j.asr.2005.08.045. C C Implementation of empirical RAT=(h05top-hmF2)/hmF2 derived from ISIS and IK19 C topside electron density profiles to obtain half peak density topside height -C h05top from the Chebishev polinomial coefficients given for +C h05top from the Chebishev polinomial coefficients given for C (1) 4 levels of solar activity: Rz= 0, 50, 100, 150 replaced by C solar radio flux covi=60, 106, 152, 198 C (2) 10 selected grids of geomagnetic latitude (N=S):0,10,20,30,40,50,60,70,80,90 C (3) 5 selected grids of local time: 0, 6, 12, 18, 24. -C (4) 4 seasonal grids: 1 equinox(SG=90deg), 2 summer (SG=180), +C (4) 4 seasonal grids: 1 equinox(SG=90deg), 2 summer (SG=180), C 3 equinox (SG=270), 4 winter(SG=360) C SG=season grids=90,180,270,360 C--------------------------------------------------------------------------------- - DIMENSION CVLEV(4) - COMMON /BLOCK1/HMF2,XNMF2,XHMF1,F1REG + DIMENSION CVLEV(4) + COMMON /BLOCK1/HMF2,XNMF2,XHMF1,F1REG * /QTOP/Y05,H05TOP,QF,XNETOP,XM3000,HHALF,TAU DATA CVLEV/60.,106.,152.,198./ LOGICAL F1REG ABMLAT=ABS(AMLAT) - IR=IFIX((covi-60.)/46.)+1 + IR=IFIX((covi-60.)/46.)+1 M1=IFIX(ABMLAT/10.)+1 L1=IFIX(TIME/6.)+1 M2=M1+1 @@ -6508,7 +6508,7 @@ C RETURN END C -C +C SUBROUTINE CHEBISH(COVS,HOURLT,ABMLAT,RATCH,SG) C--------------------------------------------------------------------------------- C CHEBISHEV POLINOMIALS FOR ABMLAT(10),HOURLT(5) @@ -6519,7 +6519,7 @@ c REAL UK(0:10),CR(0:5,5,3,4),YI(5),YY(5,3) REAL BR(6,5,3,4),YI(5),YY(5,3) REAL PL1(5),PL2(5),PL3(5),CL(0:3) C - COMMON /CONST/rad,pi + COMMON /CONST/rad,pi DATA PL1/-2.,-1.,0.,1.,2./ DATA PL2/2.,-1.,-2.,-1.,2./ DATA PL3/-1.,2.,0.,-2.,1./ @@ -6531,13 +6531,13 @@ C Equinox B0MLAT: *,-12.8000, 35.3084,-38.0043,19.6004,-4.4974,.6975 *, 5.8282,-13.3538, 9.1674,-0.9593,-0.8909,.6062 *, -1.5859, 3.5789, -3.7884, 2.7094,-1.2962,.6759 -C Summer B0MLAT +C Summer B0MLAT *, -7.1103, 21.0389,-24.5539,14.1607,-3.8537,.7266 *, 5.5333,-10.6242, 4.8751, 1.0587,-1.0821,.7527 *,-15.4487, 42.9269,-45.0314,21.4718,-4.2116,.6026 *, -6.6436, 16.4533,-15.5142, 6.8287,-1.2871,.4976 *, -7.1103, 21.0389,-24.5539,14.1607,-3.8537,.7266 -C Winter B0MLAT +C Winter B0MLAT *, 14.9103,-35.2337, 27.3078,-6.5362,-0.6265,.7509 *, 2.3846, -5.8840, 3.7023, 0.8525,-1.2663,.7086 *, -9.8846, 26.6649,-27.0173,12.6959,-2.6536,.6295 @@ -6550,13 +6550,13 @@ C Equinox B1MLAT *,-16.2744, 42.8047,-43.7009,20.7965,-4.0697,.6619 *,-17.3038, 44.3336,-40.9249,15.9042,-2.1554,.4796 *, -4.1218, 10.6136,-11.4922, 6.0470,-1.3620,.5563 -C Summer B1MLAT +C Summer B1MLAT *, -4.9692, 16.5753,-21.3543,12.7061,-3.1758,.6446 *, 1.9000, -2.8167, -0.9962, 3.0687,-1.3454,.6859 *, 7.6769,-14.8343, 6.7030, 1.5578,-1.0626,.4291 *, 5.4833,-10.6322, 4.7571, 1.2178,-0.8223,.4615 *, -4.9692, 16.5753,-21.3543,12.7061,-3.1758,.6446 -C Winter B1MLAT +C Winter B1MLAT *, -4.7282, 13.4491,-15.6931, 8.8388,-1.9732,.5874 *, 5.6756,-14.8458, 11.8927,-2.2632,-0.6122,.6948 *,-14.2872, 40.0829,-41.2716,18.1696,-2.7203,.4916 @@ -6569,13 +6569,13 @@ C Equinox B2MLAT *, 12.0462,-27.8932, 20.6241,-4.5781, 0.0814,.3501 *,-17.0551, 42.3258,-37.1874,13.3608,-1.4804,.4216 *, -3.3282, 10.4296,-12.4722, 6.7623,-1.5172,.4931 -C Summer B2MLAT +C Summer B2MLAT *, 7.3077,-17.1579, 11.6872,-0.7405,-1.0298,.5754 *, 19.2641,-45.1886, 34.3297,-8.1879,-0.1875,.6562 *, 6.0987,-11.0903, 4.3569, 1.4001,-0.7309,.3885 *, 5.9295,-13.9205, 10.2347,-2.2818, 0.0853,.3915 *, 7.3077,-17.1579, 11.6872,-0.7405,-1.0298,.5754 -C Winter B2MLAT +C Winter B2MLAT *, -1.6821, 8.6010,-13.6570, 8.6307,-1.9846,.5635 *, 5.4679,-12.3750, 7.5620, 0.5394,-1.4415,.6659 *, -8.0821, 21.9288,-21.8597, 9.3455,-1.4644,.3599 @@ -6607,17 +6607,17 @@ C DATA UL/-2.,-1.,0.,1.,2./ cl(k)=0. enddo C - IR=IFIX((covs-60.)/46.)+1 + IR=IFIX((covs-60.)/46.)+1 C Given geomagnetic latitude parameter: xi=abmlat/100. DO LS=1,3 DO LL=1,5 - B1=BR(6,LL,LS,IR) - B2=BR(5,LL,LS,IR) - B3=BR(4,LL,LS,IR) - B4=BR(3,LL,LS,IR) - B5=BR(2,LL,LS,IR) - B6=BR(1,LL,LS,IR) + B1=BR(6,LL,LS,IR) + B2=BR(5,LL,LS,IR) + B3=BR(4,LL,LS,IR) + B4=BR(3,LL,LS,IR) + B5=BR(2,LL,LS,IR) + B6=BR(1,LL,LS,IR) HLT=(LL-1)*6.0 YY(LL,LS)=B1+xi*(B2+xi*(B3+xi*(B4+xi*(B5+xi*B6)))) @@ -6645,7 +6645,7 @@ C Apply seasonal interpolation RATCH=ZA+ULL*(CL(1)-3.4*CL(3)+ULL*(CL(2)+ULL*CL(3))) RETURN - END + END C C SUBROUTINE SHAMDB0D (RLAT,FLON,T,RZ,B) @@ -6654,7 +6654,7 @@ C COMPUTES THE HOURLY VALUES OF B0 FROM A SET OF SH COEFFICIENTS C IN A POINT OF A GIVEN GEOCENTRIC LATITUDE AND LONGITUDE C OF THE EARTH'S SURFACE FOR A GIVEN MONTH AND A GIVEN SUSPOT NUMER C -C INPUT: RLAT The geogrphic latitude on the meridian given by +C INPUT: RLAT The geogrphic latitude on the meridian given by C the local time (FLON), where the modified dip C latitude is the same as of the orginal site. C FLON =LONGITUDE+15.*UT(hours) @@ -6662,11 +6662,11 @@ C T Month as a REAL number (1.0 to 12.0) C RZ 12-month running mean C OUTOUT B =B0 C -C Blanch E., D. Arrazola, D. Altadill, D. Buresova, M. Mosert, +C Blanch E., D. Arrazola, D. Altadill, D. Buresova, M. Mosert, C Adv. Space Res. 39, 701-710, 2007. -C Altadill, D., D. Arrazola, E. Blanch, D. Buresova, +C Altadill, D., D. Arrazola, E. Blanch, D. Buresova, C Adv. Space Res. 42, 610-616, 2008. -C Altadill, D., J.M. Torta, and E. Blanch, +C Altadill, D., J.M. Torta, and E. Blanch, C Adv. Space Res. 43,1825-1834, 2009. C------------------------------------------------------------------- PARAMETER (IBO=0,JBO=1,KDIM=6,LDIM=4,L=-1) @@ -6679,7 +6679,7 @@ C------------------------------------------------------------------- * HBNM(0:KDIM,0:KDIM,1-IBO-JBO:LDIM) DIMENSION BINT(0:KDIM,0:KDIM,1-IBO-JBO:LDIM), * BEXT(0:KDIM,0:KDIM,1-IBO-JBO:LDIM) - CHARACTER*1 IE + CHARACTER*1 IE COMMON/ATB/BINT,BEXT,RE,TZERO,IFIT,IB,KINT,LINT,KEXT, * LEXT,KMAX,FN @@ -6772,7 +6772,7 @@ C------------------------------------------------------------------- * 88.440,-0.393, -69.598, 0.643, * -109.481, 0.532, 82.266,-0.765, -59.229, 0.182, 55.279,-0.580, * 28.514,-0.057, -30.282, 0.326, -22.924, 0.164, 11.602,-0.073, - * 40*0.000/ + * 40*0.000/ KMAX = MAX(KINT,KEXT) IF (KMAX .GT. KDIM) GO TO 9999 @@ -6786,7 +6786,7 @@ C------------------------------------------------------------------- GNM(N,M,J)=GANM(N,M,J)+GBNM(N,M,J)*rz HNM(N,M,J)=HANM(N,M,J)+HBNM(N,M,J)*rz ENDDO - + IF (IE .EQ. 'I') THEN IF (N .GT. KINT) GO TO 500 LJ = LINT @@ -6819,7 +6819,7 @@ C------------------------------------------------------------------- C 500 CONTINUE C ********************************************************** -C SYNTHESIZES THE VALUE OF B0 FROM THE MODEL +C SYNTHESIZES THE VALUE OF B0 FROM THE MODEL C ********************************************************** CALL SCHNEVPD(RZ,RLAT,FLON,dum,T,L,dum,dum,B) RETURN @@ -6856,17 +6856,17 @@ C SUBPROGRAM USED: LEGFUN C ***** PARAMS & COEFFS TRANSFERRED FROM MAIN PROGRAM ***** -C ADAPTED FROM SUBROUTINE SCHNEV OF G.V. HAINES (COMPUTERS & GEOSCIENCES, +C ADAPTED FROM SUBROUTINE SCHNEV OF G.V. HAINES (COMPUTERS & GEOSCIENCES, C 14, 413-447, 1988) C------------------------------------------------------------------- - PARAMETER (IBO=0,JBO=1,KDIM=6,LDIM=4) + PARAMETER (IBO=0,JBO=1,KDIM=6,LDIM=4) DIMENSION FN(0:KDIM,0:KDIM), CONSTP(0:KDIM,0:KDIM) DIMENSION CML(KDIM), SML(KDIM) DIMENSION DELT(0:LDIM) DIMENSION BINT(0:KDIM,0:KDIM,1-IBO-JBO:LDIM), * BEXT(0:KDIM,0:KDIM,1-IBO-JBO:LDIM) - COMMON /CONST/dfarg,PI + COMMON /CONST/dfarg,PI * /ATB/BINT,BEXT,RE,TZERO,IFIT,IB,KINT,LINT,KEXT, * LEXT,KMAX,FN CHARACTER*1 IE,RESP @@ -6883,10 +6883,10 @@ C 2 FOURIER SERIES C 3 COSINE SERIES C 4 SINE SERIES C NOTE: TZERO AND THINT MAY DEPEND ON IBF. - IBF = 2 + IBF = 2 T1=1. T2=12. - CALL TBFIT (T1,T2,IBF,THINT,TZERO) + CALL TBFIT (T1,T2,IBF,THINT,TZERO) C IF (L .NE. 0) GO TO 100 C BN = FLATO @@ -6951,7 +6951,7 @@ C RETURN GO TO 999 ENDIF 102 CONTINUE - incept = 0 + incept = 0 if ((ibf.eq.2 .or. ibf.eq.3) .and. incept .eq. 1) then c change to intercept form of fourier series. do i=2,lint,4-ibf @@ -7074,7 +7074,7 @@ C * HBNM(0:KDIM,0:KDIM,1-IBO-JBO:LDIM) DIMENSION BINT(0:KDIM,0:KDIM,1-IBO-JBO:LDIM), * BEXT(0:KDIM,0:KDIM,1-IBO-JBO:LDIM) - CHARACTER*1 IE + CHARACTER*1 IE COMMON/ATB1/BINT,BEXT,RE,TZERO,IFIT,IB,KINT,LINT,KEXT, * LEXT,KMAX,FN @@ -7150,7 +7150,7 @@ C * -1.911, 0.016, -4.519, 0.041, * 2.644,-0.024, 5.569,-0.050, 1.287,-0.009, 3.707,-0.031, * -0.894, 0.007, -2.121, 0.019, 0.669,-0.007, 0.933,-0.010, - * 80*0.000/ + * 80*0.000/ KMAX = MAX(KINT,KEXT) IF (KMAX .GT. KDIM) GO TO 9999 @@ -7164,7 +7164,7 @@ C GNM(N,M,J)=GANM(N,M,J)+GBNM(N,M,J)*rz HNM(N,M,J)=HANM(N,M,J)+HBNM(N,M,J)*rz ENDDO - + IF (IE .EQ. 'I') THEN IF (N .GT. KINT) GO TO 500 LJ = LINT @@ -7199,7 +7199,7 @@ C 500 CONTINUE C ********************************************************** -C SYNTHESIZES THE VALUE OF B1 FROM THE MODEL +C SYNTHESIZES THE VALUE OF B1 FROM THE MODEL C ********************************************************** CALL SCHNEVPDB1(RZ,FLAT,FLON,dum,T,L,dum,dum,B) C @@ -7237,17 +7237,17 @@ C SUBPROGRAM USED: LEGFUN C ***** PARAMS & COEFFS TRANSFERRED FROM MAIN PROGRAM ***** -C ADAPTED FROM SUBROUTINE SCHNEV OF G.V. HAINES (COMPUTERS & GEOSCIENCES, +C ADAPTED FROM SUBROUTINE SCHNEV OF G.V. HAINES (COMPUTERS & GEOSCIENCES, C 14, 413-447, 1988) C------------------------------------------------------------------- - PARAMETER (IBO=0,JBO=1,KDIM=6,LDIM=4) + PARAMETER (IBO=0,JBO=1,KDIM=6,LDIM=4) DIMENSION FN(0:KDIM,0:KDIM), CONSTP(0:KDIM,0:KDIM) DIMENSION CML(KDIM), SML(KDIM) DIMENSION DELT(0:LDIM) DIMENSION BINT(0:KDIM,0:KDIM,1-IBO-JBO:LDIM), * BEXT(0:KDIM,0:KDIM,1-IBO-JBO:LDIM) - COMMON /CONST/dfarg,PI + COMMON /CONST/dfarg,PI * /ATB1/BINT,BEXT,RE,TZERO,IFIT,IB,KINT,LINT,KEXT, * LEXT,KMAX,FN CHARACTER*1 IE,RESP @@ -7264,10 +7264,10 @@ C 2 FOURIER SERIES C 3 COSINE SERIES C 4 SINE SERIES C NOTE: TZERO AND THINT MAY DEPEND ON IBF. - IBF = 2 + IBF = 2 T1=1. T2=12. - CALL TBFIT (T1,T2,IBF,THINT,TZERO) + CALL TBFIT (T1,T2,IBF,THINT,TZERO) C IF (L .NE. 0) GO TO 100 C BN = FLATO @@ -7332,7 +7332,7 @@ C RETURN GO TO 999 ENDIF 102 CONTINUE - incept = 0 + incept = 0 if ((ibf.eq.2 .or. ibf.eq.3) .and. incept .eq. 1) then c change to intercept form of fourier series. do i=2,lint,4-ibf @@ -7570,8 +7570,8 @@ C PRINT TERMS OF SERIES C 135 PRINT *, (BM(I),I=1,J) RETURN END -C -C +C +C REAL FUNCTION B0_98 ( HOUR, SAX, SUX, NSEASN, R, ZLO, ZMODIP) C----------------------------------------------------------------- C Interpolation procedure for bottomside thickness parameter B0. @@ -7599,7 +7599,7 @@ C C 01/98 corrected to include a smooth transition at the modip equator C and no discontinuity at the equatorial change in season. C 09/98 new B0 values incl values at the magnetic equator -C 10/98 longitude as input to determine if magnetic equator in northern +C 10/98 longitude as input to determine if magnetic equator in northern C or southern hemisphere C------------------------------------------------------------------- REAL NITVAL @@ -7652,8 +7652,8 @@ C bfd(2,2) at modip = -18, C bfd(2,1) or bfd(1,1) at modip = 0, C bfd(1,2) at modip = 20, C bfd(1,3) at modip = 45. -C If the Longitude is between 200 and 320 degrees then the modip -C equator is in the southern hemisphere and bfd(2,1) is used at the +C If the Longitude is between 200 and 320 degrees then the modip +C equator is in the southern hemisphere and bfd(2,1) is used at the C equator, otherwise bfd(1,1) is used. c zx1=bfd(2,3) @@ -7684,63 +7684,63 @@ c SUM = bb0 END C C - SUBROUTINE TAL(SHABR,SDELTA,SHBR,SDTDH0,AUS6,SPT) + SUBROUTINE TAL(SHABR,SDELTA,SHBR,SDTDH0,AUS6,SPT) C----------------------------------------------------------- C CALCULATES THE COEFFICIENTS SPT FOR THE POLYNOMIAL -C Y(X)=1+SPT(1)*X**2+SPT(2)*X**3+SPT(3)*X**4+SPT(4)*X**5 -C TO FIT THE VALLEY IN Y, REPRESENTED BY: -C Y(X=0)=1, THE X VALUE OF THE DEEPEST VALLEY POINT (SHABR), -C THE PRECENTAGE DEPTH (SDELTA), THE WIDTH (SHBR) AND THE -C DERIVATIVE DY/DX AT THE UPPER VALLEY BOUNDRY (SDTDH0). -C IF THERE IS AN UNWANTED ADDITIONAL EXTREMUM IN THE VALLEY -C REGION, THEN AUS6=.TRUE., ELSE AUS6=.FALSE.. -C FOR -SDELTA THE COEFF. ARE CALCULATED FOR THE FUNCTION -C Y(X)=EXP(SPT(1)*X**2+...+SPT(4)*X**5). +C Y(X)=1+SPT(1)*X**2+SPT(2)*X**3+SPT(3)*X**4+SPT(4)*X**5 +C TO FIT THE VALLEY IN Y, REPRESENTED BY: +C Y(X=0)=1, THE X VALUE OF THE DEEPEST VALLEY POINT (SHABR), +C THE PRECENTAGE DEPTH (SDELTA), THE WIDTH (SHBR) AND THE +C DERIVATIVE DY/DX AT THE UPPER VALLEY BOUNDRY (SDTDH0). +C IF THERE IS AN UNWANTED ADDITIONAL EXTREMUM IN THE VALLEY +C REGION, THEN AUS6=.TRUE., ELSE AUS6=.FALSE.. +C FOR -SDELTA THE COEFF. ARE CALCULATED FOR THE FUNCTION +C Y(X)=EXP(SPT(1)*X**2+...+SPT(4)*X**5). C----------------------------------------------------------- - DIMENSION SPT(4) - LOGICAL AUS6 + DIMENSION SPT(4) + LOGICAL AUS6 AUS6=.FALSE. if(SHBR.le.0.0) then AUS6=.TRUE. RETURN ENDIF - Z1=-SDELTA/(100.0*SHABR*SHABR) - IF(SDELTA.GT.0.) GOTO 500 - SDELTA=-SDELTA - Z1=ALOG(1.-SDELTA/100.)/(SHABR*SHABR) -500 Z3=SDTDH0/(2.*SHBR) - Z4=SHABR-SHBR - SPT(4)=2.0*(Z1*(SHBR-2.0*SHABR)*SHBR+Z3*Z4*SHABR)/ - & (SHABR*SHBR*Z4*Z4*Z4) + Z1=-SDELTA/(100.0*SHABR*SHABR) + IF(SDELTA.GT.0.) GOTO 500 + SDELTA=-SDELTA + Z1=ALOG(1.-SDELTA/100.)/(SHABR*SHABR) +500 Z3=SDTDH0/(2.*SHBR) + Z4=SHABR-SHBR + SPT(4)=2.0*(Z1*(SHBR-2.0*SHABR)*SHBR+Z3*Z4*SHABR)/ + & (SHABR*SHBR*Z4*Z4*Z4) SPT(3)=Z1*(2.0*SHBR-3.0*SHABR)/(SHABR*Z4*Z4)- - & (2.*SHABR+SHBR)*SPT(4) - SPT(2)=-2.0*Z1/SHABR-2.0*SHABR*SPT(3)-3.0*SHABR*SHABR*SPT(4) - SPT(1)=Z1-SHABR*(SPT(2)+SHABR*(SPT(3)+SHABR*SPT(4))) - B=4.*SPT(3)/(5.*SPT(4))+SHABR - C=-2.*SPT(1)/(5*SPT(4)*SHABR) - Z2=B*B/4.-C - IF(Z2.LT.0.0) GOTO 300 - Z3=SQRT(Z2) - Z1=B/2. - Z2=-Z1+Z3 - IF(Z2.GT.0.0.AND.Z2.LT.SHBR) AUS6=.TRUE. - IF (ABS(Z3).GT.1.E-15) GOTO 400 - Z2=C/Z2 - IF(Z2.GT.0.0.AND.Z2.LT.SHBR) AUS6=.TRUE. - RETURN -400 Z2=-Z1-Z3 - IF(Z2.GT.0.0.AND.Z2.LT.SHBR) AUS6=.TRUE. -300 RETURN - END + & (2.*SHABR+SHBR)*SPT(4) + SPT(2)=-2.0*Z1/SHABR-2.0*SHABR*SPT(3)-3.0*SHABR*SHABR*SPT(4) + SPT(1)=Z1-SHABR*(SPT(2)+SHABR*(SPT(3)+SHABR*SPT(4))) + B=4.*SPT(3)/(5.*SPT(4))+SHABR + C=-2.*SPT(1)/(5*SPT(4)*SHABR) + Z2=B*B/4.-C + IF(Z2.LT.0.0) GOTO 300 + Z3=SQRT(Z2) + Z1=B/2. + Z2=-Z1+Z3 + IF(Z2.GT.0.0.AND.Z2.LT.SHBR) AUS6=.TRUE. + IF (ABS(Z3).GT.1.E-15) GOTO 400 + Z2=C/Z2 + IF(Z2.GT.0.0.AND.Z2.LT.SHBR) AUS6=.TRUE. + RETURN +400 Z2=-Z1-Z3 + IF(Z2.GT.0.0.AND.Z2.LT.SHBR) AUS6=.TRUE. +300 RETURN + END C C SUBROUTINE VALGUL(XHI,HVB,VWU,VWA,VDP) -C --------------------------------------------------------------------- +C --------------------------------------------------------------------- C CALCULATES E-F VALLEY PARAMETERS; T.L. GULYAEVA, ADVANCES IN C SPACE RESEARCH 7, #6, 39-48, 1987. C C INPUT: XHI SOLAR ZENITH ANGLE [DEGREE] -C +C C OUTPUT: VDP VALLEY DEPTH (NVB/NME) C VWU VALLEY WIDTH [KM] C VWA VALLEY WIDTH (SMALLER, CORRECTED BY RAWER) @@ -7763,7 +7763,7 @@ C C Subroutine DRegion(z,it,f,vKp,f5SW,f6WA,elg) c----------------------------------------------------------------------- -c Reference: Danilov, Rodevich, and Smirnova, Adv. Space Res. +c Reference: Danilov, Rodevich, and Smirnova, Adv. Space Res. C 15, #2, 165, 1995. C C Input: z - solar zenith angle in degrees @@ -7777,18 +7777,18 @@ C =0 no WA, =0.5 weak WA, =1 strong WA C Criteria for SW and WA indicators: C SW minor: Temperature increase at the 30 hPa level by 10 deg. C SA major: The same but by 20 degrees. -C Temperature data for each year are published +C Temperature data for each year are published C in Beilage zur Berliner Wetterkarte (K. Labitzke et al.). -C WA weak: An increase of the absorption in the 2-2.8 MHz +C WA weak: An increase of the absorption in the 2-2.8 MHz C range at short A3 paths by 15 dB C WA strong: The same by 30 dB. -C +C C Only for month 12 to 2 (winter). C C Output: elg(7) alog10 of electron density [cm-3] at h=60,65, C 70,75,80,85, and 90km c----------------------------------------------------------------------- -c +c cor dimension h(7),A0(7),A1(7),A2(7),A3(7),A4(7),A5(7),A6(7),elg(7) dimension A0(7),A1(7),A2(7),A3(7),A4(7),A5(7),A6(7),elg(7) data A0/1.0,1.2,1.4,1.5,1.6,1.7,3.0/ @@ -7830,155 +7830,155 @@ cor dimension h(7),A0(7),A1(7),A2(7),A3(7),A4(7),A5(7),A6(7),elg(7) C C C -C -C************************************************************ -C*************** EARTH MAGNETIC FIELD *********************** -C************************************************************** C +C************************************************************ +C*************** EARTH MAGNETIC FIELD *********************** +C************************************************************** C - SUBROUTINE FIELDG(DLAT,DLONG,ALT,X,Y,Z,F,DIP,DEC,SMODIP) -C THIS IS A SPECIAL VERSION OF THE POGO 68/10 MAGNETIC FIELD -C LEGENDRE MODEL. TRANSFORMATION COEFF. G(144) VALID FOR 1973. -C INPUT: DLAT, DLONG=GEOGRAPHIC COORDINATES/DEG.(-90/90,0/360), -C ALT=ALTITUDE/KM. -C OUTPUT: F TOTAL FIELD (GAUSS), Z DOWNWARD VERTICAL COMPONENT -C X,Y COMPONENTS IN THE EQUATORIAL PLANE (X TO ZERO LONGITUDE). -C DIP INCLINATION ANGLE(DEGREE). SMODIP RAWER'S MODFIED DIP. -C SHEIK,1977. +C + SUBROUTINE FIELDG(DLAT,DLONG,ALT,X,Y,Z,F,DIP,DEC,SMODIP) +C THIS IS A SPECIAL VERSION OF THE POGO 68/10 MAGNETIC FIELD +C LEGENDRE MODEL. TRANSFORMATION COEFF. G(144) VALID FOR 1973. +C INPUT: DLAT, DLONG=GEOGRAPHIC COORDINATES/DEG.(-90/90,0/360), +C ALT=ALTITUDE/KM. +C OUTPUT: F TOTAL FIELD (GAUSS), Z DOWNWARD VERTICAL COMPONENT +C X,Y COMPONENTS IN THE EQUATORIAL PLANE (X TO ZERO LONGITUDE). +C DIP INCLINATION ANGLE(DEGREE). SMODIP RAWER'S MODFIED DIP. +C SHEIK,1977. DIMENSION H(144),XI(3),G(144),FEL1(72),FEL2(72) - COMMON/CONST/UMR,PI - DATA FEL1/0.0, 0.1506723,0.0101742, -0.0286519, 0.0092606, - & -0.0130846, 0.0089594, -0.0136808,-0.0001508, -0.0093977, - & 0.0130650, 0.0020520, -0.0121956, -0.0023451, -0.0208555, - & 0.0068416,-0.0142659, -0.0093322, -0.0021364, -0.0078910, - & 0.0045586, 0.0128904, -0.0002951, -0.0237245,0.0289493, - & 0.0074605, -0.0105741, -0.0005116, -0.0105732, -0.0058542, - &0.0033268, 0.0078164,0.0211234, 0.0099309, 0.0362792, - &-0.0201070,-0.0046350,-0.0058722,0.0011147,-0.0013949, - & -0.0108838, 0.0322263, -0.0147390, 0.0031247, 0.0111986, - & -0.0109394,0.0058112, 0.2739046, -0.0155682, -0.0253272, - & 0.0163782, 0.0205730, 0.0022081, 0.0112749,-0.0098427, - & 0.0072705, 0.0195189, -0.0081132, -0.0071889, -0.0579970, - & -0.0856642, 0.1884260,-0.7391512, 0.1210288, -0.0241888, - & -0.0052464, -0.0096312, -0.0044834, 0.0201764, 0.0258343, - &0.0083033, 0.0077187/ - DATA FEL2/0.0586055,0.0102236,-0.0396107, - & -0.0167860, -0.2019911, -0.5810815,0.0379916, 3.7508268, - & 1.8133030, -0.0564250, -0.0557352, 0.1335347, -0.0142641, - & -0.1024618,0.0970994, -0.0751830,-0.1274948, 0.0402073, - & 0.0386290, 0.1883088, 0.1838960, -0.7848989,0.7591817, - & -0.9302389,-0.8560960, 0.6633250, -4.6363869, -13.2599277, - & 0.1002136, 0.0855714,-0.0991981, -0.0765378,-0.0455264, - & 0.1169326, -0.2604067, 0.1800076, -0.2223685, -0.6347679, - &0.5334222, -0.3459502,-0.1573697, 0.8589464, 1.7815990, - &-6.3347645, -3.1513653, -9.9927750,13.3327637, -35.4897308, - &37.3466339, -0.5257398, 0.0571474, -0.5421217, 0.2404770, - & -0.1747774,-0.3433644, 0.4829708,0.3935944, 0.4885033, - & 0.8488121, -0.7640999, -1.8884945, 3.2930784,-7.3497229, - & 0.1672821,-0.2306652, 10.5782146, 12.6031065, 8.6579742, - & 215.5209961, -27.1419220,22.3405762,1108.6394043/ - K=0 - DO 10 I=1,72 - K=K+1 - G(K)=FEL1(I) -10 G(72+K)=FEL2(I) - RLAT=DLAT*UMR - CT=SIN(RLAT) - ST=COS(RLAT) - NMAX=11 - D=SQRT(40680925.0-272336.0*CT*CT) - RLONG=DLONG*UMR - CP=COS(RLONG) - SP=SIN(RLONG) - ZZZ=(ALT+40408589.0/D)*CT/6371.2 - RHO=(ALT+40680925.0/D)*ST/6371.2 - XXX=RHO*CP - YYY=RHO*SP - RQ=1.0/(XXX*XXX+YYY*YYY+ZZZ*ZZZ) - XI(1)=XXX*RQ - XI(2)=YYY*RQ - XI(3)=ZZZ*RQ - IHMAX=NMAX*NMAX+1 - LAST=IHMAX+NMAX+NMAX - IMAX=NMAX+NMAX-1 - DO 100 I=IHMAX,LAST -100 H(I)=G(I) - DO 200 K=1,3,2 - I=IMAX - IH=IHMAX -300 IL=IH-I - F1=2./(I-K+2.) - X1=XI(1)*F1 - Y1=XI(2)*F1 - Z1=XI(3)*(F1+F1) - I=I-2 - IF((I-1).LT.0) GOTO 400 - IF((I-1).EQ.0) GOTO 500 - DO 600 M=3,I,2 - H(IL+M+1)=G(IL+M+1)+Z1*H(IH+M+1)+X1*(H(IH+M+3)-H(IH+M-1))- - &Y1*(H(IH+M+2)+H(IH+M-2)) - H(IL+M)=G(IL+M)+Z1*H(IH+M)+X1*(H(IH+M+2)-H(IH+M-2))+ - &Y1*(H(IH+M+3)+H(IH+M-1)) -600 CONTINUE -500 H(IL+2)=G(IL+2)+Z1*H(IH+2)+X1*H(IH+4)-Y1*(H(IH+3)+H(IH)) - H(IL+1)=G(IL+1)+Z1*H(IH+1)+Y1*H(IH+4)+X1*(H(IH+3)-H(IH)) -400 H(IL)=G(IL)+Z1*H(IH)+2.0*(X1*H(IH+1)+Y1*H(IH+2)) -700 IH=IL - IF(I.GE.K) GOTO 300 -200 CONTINUE - S=0.5*H(1)+2.0*(H(2)*XI(3)+H(3)*XI(1)+H(4)*XI(2)) - XT=(RQ+RQ)*SQRT(RQ) - X=XT*(H(3)-S*XXX) - Y=XT*(H(4)-S*YYY) - Z=XT*(H(2)-S*ZZZ) - F=SQRT(X*X+Y*Y+Z*Z) - BRH0=Y*SP+X*CP - Y=Y*CP-X*SP - X=Z*ST-BRH0*CT - Z=-Z*CT-BRH0*ST + COMMON/CONST/UMR,PI + DATA FEL1/0.0, 0.1506723,0.0101742, -0.0286519, 0.0092606, + & -0.0130846, 0.0089594, -0.0136808,-0.0001508, -0.0093977, + & 0.0130650, 0.0020520, -0.0121956, -0.0023451, -0.0208555, + & 0.0068416,-0.0142659, -0.0093322, -0.0021364, -0.0078910, + & 0.0045586, 0.0128904, -0.0002951, -0.0237245,0.0289493, + & 0.0074605, -0.0105741, -0.0005116, -0.0105732, -0.0058542, + &0.0033268, 0.0078164,0.0211234, 0.0099309, 0.0362792, + &-0.0201070,-0.0046350,-0.0058722,0.0011147,-0.0013949, + & -0.0108838, 0.0322263, -0.0147390, 0.0031247, 0.0111986, + & -0.0109394,0.0058112, 0.2739046, -0.0155682, -0.0253272, + & 0.0163782, 0.0205730, 0.0022081, 0.0112749,-0.0098427, + & 0.0072705, 0.0195189, -0.0081132, -0.0071889, -0.0579970, + & -0.0856642, 0.1884260,-0.7391512, 0.1210288, -0.0241888, + & -0.0052464, -0.0096312, -0.0044834, 0.0201764, 0.0258343, + &0.0083033, 0.0077187/ + DATA FEL2/0.0586055,0.0102236,-0.0396107, + & -0.0167860, -0.2019911, -0.5810815,0.0379916, 3.7508268, + & 1.8133030, -0.0564250, -0.0557352, 0.1335347, -0.0142641, + & -0.1024618,0.0970994, -0.0751830,-0.1274948, 0.0402073, + & 0.0386290, 0.1883088, 0.1838960, -0.7848989,0.7591817, + & -0.9302389,-0.8560960, 0.6633250, -4.6363869, -13.2599277, + & 0.1002136, 0.0855714,-0.0991981, -0.0765378,-0.0455264, + & 0.1169326, -0.2604067, 0.1800076, -0.2223685, -0.6347679, + &0.5334222, -0.3459502,-0.1573697, 0.8589464, 1.7815990, + &-6.3347645, -3.1513653, -9.9927750,13.3327637, -35.4897308, + &37.3466339, -0.5257398, 0.0571474, -0.5421217, 0.2404770, + & -0.1747774,-0.3433644, 0.4829708,0.3935944, 0.4885033, + & 0.8488121, -0.7640999, -1.8884945, 3.2930784,-7.3497229, + & 0.1672821,-0.2306652, 10.5782146, 12.6031065, 8.6579742, + & 215.5209961, -27.1419220,22.3405762,1108.6394043/ + K=0 + DO 10 I=1,72 + K=K+1 + G(K)=FEL1(I) +10 G(72+K)=FEL2(I) + RLAT=DLAT*UMR + CT=SIN(RLAT) + ST=COS(RLAT) + NMAX=11 + D=SQRT(40680925.0-272336.0*CT*CT) + RLONG=DLONG*UMR + CP=COS(RLONG) + SP=SIN(RLONG) + ZZZ=(ALT+40408589.0/D)*CT/6371.2 + RHO=(ALT+40680925.0/D)*ST/6371.2 + XXX=RHO*CP + YYY=RHO*SP + RQ=1.0/(XXX*XXX+YYY*YYY+ZZZ*ZZZ) + XI(1)=XXX*RQ + XI(2)=YYY*RQ + XI(3)=ZZZ*RQ + IHMAX=NMAX*NMAX+1 + LAST=IHMAX+NMAX+NMAX + IMAX=NMAX+NMAX-1 + DO 100 I=IHMAX,LAST +100 H(I)=G(I) + DO 200 K=1,3,2 + I=IMAX + IH=IHMAX +300 IL=IH-I + F1=2./(I-K+2.) + X1=XI(1)*F1 + Y1=XI(2)*F1 + Z1=XI(3)*(F1+F1) + I=I-2 + IF((I-1).LT.0) GOTO 400 + IF((I-1).EQ.0) GOTO 500 + DO 600 M=3,I,2 + H(IL+M+1)=G(IL+M+1)+Z1*H(IH+M+1)+X1*(H(IH+M+3)-H(IH+M-1))- + &Y1*(H(IH+M+2)+H(IH+M-2)) + H(IL+M)=G(IL+M)+Z1*H(IH+M)+X1*(H(IH+M+2)-H(IH+M-2))+ + &Y1*(H(IH+M+3)+H(IH+M-1)) +600 CONTINUE +500 H(IL+2)=G(IL+2)+Z1*H(IH+2)+X1*H(IH+4)-Y1*(H(IH+3)+H(IH)) + H(IL+1)=G(IL+1)+Z1*H(IH+1)+Y1*H(IH+4)+X1*(H(IH+3)-H(IH)) +400 H(IL)=G(IL)+Z1*H(IH)+2.0*(X1*H(IH+1)+Y1*H(IH+2)) +700 IH=IL + IF(I.GE.K) GOTO 300 +200 CONTINUE + S=0.5*H(1)+2.0*(H(2)*XI(3)+H(3)*XI(1)+H(4)*XI(2)) + XT=(RQ+RQ)*SQRT(RQ) + X=XT*(H(3)-S*XXX) + Y=XT*(H(4)-S*YYY) + Z=XT*(H(2)-S*ZZZ) + F=SQRT(X*X+Y*Y+Z*Z) + BRH0=Y*SP+X*CP + Y=Y*CP-X*SP + X=Z*ST-BRH0*CT + Z=-Z*CT-BRH0*ST zdivf=z/f IF(ABS(zdivf).GT.1.) zdivf=SIGN(1.,zdivf) DIP=ASIN(zdivf) - ydivs=y/sqrt(x*x+y*y) + ydivs=y/sqrt(x*x+y*y) IF(ABS(ydivs).GT.1.) ydivs=SIGN(1.,ydivs) DEC=ASIN(ydivs) dipdiv=DIP/SQRT(DIP*DIP+ST) IF(ABS(dipdiv).GT.1.) dipdiv=SIGN(1.,dipdiv) SMODIP=ASIN(dipdiv) - DIP=DIP/UMR - DEC=DEC/UMR - SMODIP=SMODIP/UMR - RETURN - END + DIP=DIP/UMR + DEC=DEC/UMR + SMODIP=SMODIP/UMR + RETURN + END C C -C************************************************************ -C*********** INTERPOLATION AND REST *************************** -C************************************************************** +C************************************************************ +C*********** INTERPOLATION AND REST *************************** +C************************************************************** C C - SUBROUTINE REGFA1(X11,X22,FX11,FX22,EPS,FW,F,SCHALT,X) -C REGULA-FALSI-PROCEDURE TO FIND X WITH F(X)-FW=0. X1,X2 ARE THE -C STARTING VALUES. THE COMUTATION ENDS WHEN THE X-INTERVAL -C HAS BECOME LESS THEN EPS . IF SIGN(F(X1)-FW)= SIGN(F(X2)-FW) -C THEN SCHALT=.TRUE. - LOGICAL L1,LINKS,K,SCHALT + SUBROUTINE REGFA1(X11,X22,FX11,FX22,EPS,FW,F,SCHALT,X) +C REGULA-FALSI-PROCEDURE TO FIND X WITH F(X)-FW=0. X1,X2 ARE THE +C STARTING VALUES. THE COMUTATION ENDS WHEN THE X-INTERVAL +C HAS BECOME LESS THEN EPS . IF SIGN(F(X1)-FW)= SIGN(F(X2)-FW) +C THEN SCHALT=.TRUE. + LOGICAL L1,LINKS,K,SCHALT SCHALT=.FALSE. - EP=EPS - X1=X11 - X2=X22 - F1=FX11-FW - F2=FX22-FW - K=.FALSE. - NG=2 - LFD=0 + EP=EPS + X1=X11 + X2=X22 + F1=FX11-FW + F2=FX22-FW + K=.FALSE. + NG=2 + LFD=0 IF(F1*F2.LE.0.0) GOTO 200 - X=0.0 - SCHALT=.TRUE. + X=0.0 + SCHALT=.TRUE. RETURN -200 X=(X1*F2-X2*F1)/(F2-F1) - GOTO 400 -300 L1=LINKS +200 X=(X1*F2-X2*F1)/(F2-F1) + GOTO 400 +300 L1=LINKS DX=(X2-X1)/NG IF(.NOT.LINKS) DX=DX*(NG-1) X=X1+DX @@ -7987,22 +7987,22 @@ C THEN SCHALT=.TRUE. IF(LFD.GT.20) THEN EP=EP*10. LFD=0 - ENDIF + ENDIF LINKS=(F1*FX.GT.0.0) - K=.NOT.K + K=.NOT.K IF(LINKS) THEN - X1=X - F1=FX + X1=X + F1=FX ELSE - X2=X - F2=FX - ENDIF - IF(ABS(X2-X1).LE.EP) GOTO 800 - IF(K) GOTO 300 - IF((LINKS.AND.(.NOT.L1)).OR.(.NOT.LINKS.AND.L1)) NG=2*NG - GOTO 200 -800 RETURN - END + X2=X + F2=FX + ENDIF + IF(ABS(X2-X1).LE.EP) GOTO 800 + IF(K) GOTO 300 + IF((LINKS.AND.(.NOT.L1)).OR.(.NOT.LINKS.AND.L1)) NG=2*NG + GOTO 200 +800 RETURN + END C C C****************************************************************** @@ -8026,8 +8026,8 @@ c height height in km c c out: declin declination of the sun in degrees c zenith zenith angle of the sun in degrees -c sunrse local time of sunrise in hours -c sunset local time of sunset in hours +c sunrse local time of sunrise in hours +c sunset local time of sunset in hours c------------------------------------------------------------------- c common/const/dtr,pi /const1/humr,dumr @@ -8099,13 +8099,13 @@ c end c C - FUNCTION HPOL(HOUR,TW,XNW,SA,SU,DSA,DSU) + FUNCTION HPOL(HOUR,TW,XNW,SA,SU,DSA,DSU) C------------------------------------------------------- -C PROCEDURE FOR SMOOTH TIME-INTERPOLATION USING EPSTEIN -C STEP FUNCTION AT SUNRISE (SA) AND SUNSET (SU). THE +C PROCEDURE FOR SMOOTH TIME-INTERPOLATION USING EPSTEIN +C STEP FUNCTION AT SUNRISE (SA) AND SUNSET (SU). THE C STEP-WIDTH FOR SUNRISE IS DSA AND FOR SUNSET DSU. -C TW,NW ARE THE DAY AND NIGHT VALUE OF THE PARAMETER TO -C BE INTERPOLATED. SA AND SU ARE TIME OF SUNRIES AND +C TW,NW ARE THE DAY AND NIGHT VALUE OF THE PARAMETER TO +C BE INTERPOLATED. SA AND SU ARE TIME OF SUNRIES AND C SUNSET IN DECIMAL HOURS. C BILITZA----------------------------------------- 1979. IF(ABS(SU).GT.25.) THEN @@ -8117,16 +8117,16 @@ C BILITZA----------------------------------------- 1979. RETURN ENDIF HPOL=XNW+(TW-XNW)*EPST(HOUR,DSA,SA)+ - & (XNW-TW)*EPST(HOUR,DSU,SU) - RETURN - END -C + & (XNW-TW)*EPST(HOUR,DSU,SU) + RETURN + END +C C SUBROUTINE MODA(IN,IYEAR,MONTH,IDAY,IDOY,NRDAYMO) C------------------------------------------------------------------- -C CALCULATES DAY OF YEAR (IDOY, ddd) FROM YEAR (IYEAR, yy or yyyy), -C MONTH (MONTH, mm) AND DAY OF MONTH (IDAY, dd) IF IN=0, OR MONTH -C AND DAY FROM YEAR AND DAY OF YEAR IF IN=1. NRDAYMO is an output +C CALCULATES DAY OF YEAR (IDOY, ddd) FROM YEAR (IYEAR, yy or yyyy), +C MONTH (MONTH, mm) AND DAY OF MONTH (IDAY, dd) IF IN=0, OR MONTH +C AND DAY FROM YEAR AND DAY OF YEAR IF IN=1. NRDAYMO is an output C parameter providing the number of days in the specific month. C------------------------------------------------------------------- DIMENSION MM(12) @@ -8136,11 +8136,11 @@ C------------------------------------------------------------------- MOBE=0 c c leap year rule: years evenly divisible by 4 are leap years, except -c years also evenly divisible by 100 are not leap years, except years -c also evenly divisible by 400 are leap years. The year 2000 therefore +c years also evenly divisible by 100 are not leap years, except years +c also evenly divisible by 400 are leap years. The year 2000 therefore C is a leap year. The 100 and 400 year exception rule c if((iyear/4*4.eq.iyear).and.(iyear/100*100.ne.iyear)) mm(2)=29 -c will become important again in the year 2100 which is not a leap +c will become important again in the year 2100 which is not a leap C year. c mm(2)=28 @@ -8149,7 +8149,7 @@ c IF(IN.GT.0) GOTO 5 mosum=0 if(month.gt.1) then - do 1234 i=1,month-1 + do 1234 i=1,month-1 1234 mosum=mosum+mm(i) endif idoy=mosum+iday @@ -8165,7 +8165,7 @@ c 55 MONTH=IMO IDAY=IDOY-MOOLD RETURN - END + END c c subroutine ut_lt(mode,ut,slt,glong,iyyy,ddd) @@ -8283,7 +8283,7 @@ C SRASN=3.141592654-ATAN2(COS(OBLIQ)/SOB*SC,-COS(SLP)/COS1) RETURN END -C +C C C ********************************************************************* C ************************ EPSTEIN FUNCTIONS ************************** @@ -8350,19 +8350,19 @@ C -------------------------------------------------------------- STEP C C REAL FUNCTION EPSTEP ( Y2, Y1, SC, HX, X) -C---------------------------------------------- STEP FROM Y1 TO Y2 +C---------------------------------------------- STEP FROM Y1 TO Y2 EPSTEP = Y1 + ( Y2 - Y1 ) * EPST ( X, SC, HX) RETURN END C C REAL FUNCTION EPLA ( X, SC, HX ) -C ------------------------------------------------------------ PEAK +C ------------------------------------------------------------ PEAK COMMON/ARGEXP/ARGMAX D1 = ( X - HX ) / SC IF (ABS(D1).LT.ARGMAX) GOTO 1 EPLA = 0 - RETURN + RETURN 1 D0 = EXP ( D1 ) D2 = 1. + D0 EPLA = D0 / ( D2 * D2 ) @@ -8372,8 +8372,8 @@ c c REAL FUNCTION BOOKER(H,N,AH,AV,D) c---------------------------------------------------------------- -C PROFILE BASED ON BOOKER APPROACH -C H HEIGHT IN KM +C PROFILE BASED ON BOOKER APPROACH +C H HEIGHT IN KM C N NUMBER OF PROFILE SECTIONS WITH CONSTANT GRADIENT C AH(N) HEIGHTS MARKING BEGINNING AND END OF SECTIONS C AV(N) PARAMETER VALUES AT AH @@ -8388,15 +8388,15 @@ C aa = eptr(h ,d(i),ah(i+1)) bb = eptr(ah(i),d(i),ah(i+1)) ST(I+1)=(AV(I+2)-AV(I+1))/(AH(I+2)-AH(I+1)) -1 SUM=SUM+(ST(I+1)-ST(I))*(AA-BB)*D(I) - BOOKER=SUM - RETURN - END +1 SUM=SUM+(ST(I+1)-ST(I))*(AA-BB)*D(I) + BOOKER=SUM + RETURN + END C C FUNCTION XE2TO5(H,HMF2,NL,HX,SC,AMP) C---------------------------------------------------------------------- -C NORMALIZED ELECTRON DENSITY (N/NMF2) FOR THE MIDDLE IONOSPHERE FROM +C NORMALIZED ELECTRON DENSITY (N/NMF2) FOR THE MIDDLE IONOSPHERE FROM C HME TO HMF2 USING LAY-FUNCTIONS. C---------------------------------------------------------------------- DIMENSION HX(NL),SC(NL),AMP(NL) @@ -8428,15 +8428,15 @@ C C C SUBROUTINE ROGUL(IDAY,XHI,SX,GRO) -C --------------------------------------------------------------------- +C --------------------------------------------------------------------- C CALCULATES RATIO H0.5/HMF2 FOR HALF-DENSITY POINT (NE(H0.5)=0.5* C NMF2) T. GULYAEVA, ADVANCES IN SPACE RESEARCH 7, #6, 39-48, 1987. C C INPUT: IDAY DAY OF YEAR C XHI SOLAR ZENITH ANGLE [DEGREE] -C +C C OUTPUT: GRO RATIO OF HALF DENSITY HEIGHT TO F PEAK HEIGHT -C SX SMOOTHLY VARYING SEASON PARAMTER (SX=1 FOR +C SX SMOOTHLY VARYING SEASON PARAMTER (SX=1 FOR C DAY=1; SX=3 FOR DAY=180; SX=2 FOR EQUINOX) C --------------------------------------------------------------------- C @@ -8545,7 +8545,7 @@ C DO 1 J=1,5 BLI(J) = 0. DO 1 I=1,5 -1 ALI(J,I) = 0. +1 ALI(J,I) = 0. DO 2 I=1,N DO 3 K=1,M0 3 XLI(I,K) = RLAY( X(K), HM, SC(I), HX(I) ) @@ -8558,7 +8558,7 @@ C DO 6 K=1,M BLI(J) = BLI(J) + W(K) * Y(K) * XLI(J,K) DO 6 I=1,N -6 ALI(J,I) = ALI(J,I) + W(K) * XLI(I,K) +6 ALI(J,I) = ALI(J,I) + W(K) * XLI(I,K) & * XLI(J,K) 7 CONTINUE CALL LNGLSN( N, ALI, BLI, SING ) @@ -8570,7 +8570,7 @@ C END C C - SUBROUTINE INILAY(NIGHT,F1REG,XNMF2,XNMF1,XNME,VNE,HMF2,HMF1, + SUBROUTINE INILAY(NIGHT,F1REG,XNMF2,XNMF1,XNME,VNE,HMF2,HMF1, & HME,HV1,HV2,HHALF,HXL,SCL,AMP,IQUAL) C------------------------------------------------------------------- C CALCULATES AMPLITUDES FOR LAY FUNCTIONS @@ -8589,12 +8589,12 @@ C HV1 ALTITUDE OF VALLEY TOP [KM] C HV2 ALTITUDE OF VALLEY BASE [KM] C HHALF ALTITUDE OF HALF-F2-PEAK-DENSITY [KM] C -C OUTPUT: HXL(4) HEIGHT PARAMETERS FOR LAY FUNCTIONS [KM] +C OUTPUT: HXL(4) HEIGHT PARAMETERS FOR LAY FUNCTIONS [KM] C SCL(4) SCALE PARAMETERS FOR LAY FUNCTIONS [KM] C AMP(4) AMPLITUDES FOR LAY FUNCTIONS C IQUAL =0 ok, =1 ok using second choice for HXL(1) C =2 NO SOLUTION -C--------------------------------------------------------------- +C--------------------------------------------------------------- DIMENSION XX(8),YY(8),WW(8),AMP(4),HXL(4),SCL(4) LOGICAL SSIN,NIGHT,F1REG c @@ -8637,7 +8637,7 @@ c c C DAY CONDITION-------------------------------------------------- c earlier tested: HXL(2) = HMF1 + SCL(2) -c +c IF(NIGHT) GOTO 7711 NUMCON = 8 HXL(1) = 0.9 * HMF2 @@ -8677,11 +8677,11 @@ c with F-region -------------------------------------------- GOTO 7722 c C NIGHT CONDITION--------------------------------------------------- -c different HXL,SCL values were tested including: -c SCL(1) = HMF2 * 0.15 - 27.1 HXL(2) = 200. +c different HXL,SCL values were tested including: +c SCL(1) = HMF2 * 0.15 - 27.1 HXL(2) = 200. c HXL(2) = HMF1 + SCL(2) HXL(3) = 140. c SCL(3) = 5. HXL(4) = HME + SCL(4) -c HXL(4) = 105. +c HXL(4) = 105. c 7711 NUMCON = 7 HXL(1) = HHALF @@ -8734,56 +8734,56 @@ c---------------------------------------------------------------- c c - subroutine read_ig_rz + subroutine read_ig_rz c---------------------------------------------------------------- -c Reads the Rz12 and IG12 indices file IG_RZ.DAT from I/O UNIT=12 +c Reads the Rz12 and IG12 indices file IG_RZ.DAT from I/O UNIT=12 c and stores the indices in COMMON: c common/igrz/aig,arziyst,iyed with aig(806),arz(806), c start year (iyst) c end year (iyed) -c -c The indices file IG_RZ.DAT is structured as follows (values are -c separated by comma): +c +c The indices file IG_RZ.DAT is structured as follows (values are +c separated by comma): c day, month, year of the last update of this file, c a blank line c start month, start year, end month, end year, c a blank line -c the IG index for December of start year minus 1 (this value is +c the IG index for December of start year minus 1 (this value is c needed for interpolating from 1st to 15th of first year) -c the 12 IG indices (13-months running mean) for start year, -c the 12 IG indices for the second year +c the 12 IG indices (13-months running mean) for start year, +c the 12 IG indices for the second year c .. and so on until the last year, -c the 12 IG indices for the last year +c the 12 IG indices for the last year c the IG index for January of end year plus 1 (needed for interpolation) c a blank line -c the Rz index for December of start year minus 1 +c the Rz index for December of start year minus 1 c the 12 Rz indices (13-months running mean) for the start year, -c the 12 Rz indices for the second year +c the 12 Rz indices for the second year c .. and so on until the last year. -c the 12 Rz indices for the last year -c the Rz index for January of end year plus 1 -c +c the 12 Rz indices for the last year +c the Rz index for January of end year plus 1 +c c A negative Rz index means that the given index is the 13-months- -C running mean of the solar radio flux (F10.7). The close correlation +C running mean of the solar radio flux (F10.7). The close correlation C between (Rz)12 and (F10.7)12 is used to compute the (Rz)12 indices. c c An IG index of -111 indicates that no IG values are available for the -c time period. In this case a correlation function between (IG)12 and +c time period. In this case a correlation function between (IG)12 and C (Rz)12 is used to obtain (IG)12. c c The computation of the 13-month-running mean for month M requires the -c indices for the six months preceeding M and the six months following -C M (month: M-6, ..., M+6). To calculate the current running mean one -C therefore requires predictions of the indix for the next six months. -C Starting from six months before the UPDATE DATE (listed at the top of -c the file) and onward the indices are therefore based on indices +c indices for the six months preceeding M and the six months following +C M (month: M-6, ..., M+6). To calculate the current running mean one +C therefore requires predictions of the indix for the next six months. +C Starting from six months before the UPDATE DATE (listed at the top of +c the file) and onward the indices are therefore based on indices c predictions. c---------------------------------------------------------------- integer iyst,iyend,iymst,iupd,iupm,iupy,imst,imend real aig(806),arz(806) character datapath*200 - + common /igrz/aig,arz,iymst,iymend common /path/ datapath open(unit=12,file=TRIM(ADJUSTL(datapath))//'ig_rz.dat', @@ -8801,7 +8801,7 @@ c get number of data points to read. read(12,*) imst,iyst,imend,iyend iymst=iyst*100+imst iymend=iyend*100+imend - + c inum_vals= 12-imst+1+(iyend-iyst-1)*12 +imend + 2 c 1st year \ full years \last y\ before & after @@ -8814,7 +8814,7 @@ c read all the IG12 (ionoindx) and Rz12 (indrz) values c use scale factor 0.7 for new sunspot number starting from Jan 2014 c and starting with ig_rz file for Oct 2016. if(iupy*100+iupm.gt.201609) then - inum_chan= 3-imst+(2014-iyst)*12 + inum_chan= 3-imst+(2014-iyst)*12 do 1 jj=inum_chan,inum_vals arz(jj)=arz(jj)*0.7 c ggg=aig(jj) @@ -8829,7 +8829,7 @@ c if(zi.gt.274.0) zi=274.0 c ggg=zi c endif c arz(jj)=rrr -c aig(jj)=ggg +c aig(jj)=ggg 1 continue endif close(unit=12) @@ -8848,12 +8848,12 @@ c rsn interpolation parameter c nmonth previous or following month depending c on day c -c Uses read_ig_rz and common/igrz/ to get indices -c +c Uses read_ig_rz and common/igrz/ to get indices +c c rz(1) & ig(1) contain the indices for the month mm and rz(2) & ig(2) c for the previous month (if day less than 15) or for the following -c month (if day greater than 15). These indices are for the mid of the -c month. The indices for the given day are obtained by linear +c month (if day greater than 15). These indices are for the mid of the +c month. The indices for the given day are obtained by linear c interpolation and are stored in rz(3) and ig(3). c---------------------------------------------------------------- @@ -8862,8 +8862,8 @@ c---------------------------------------------------------------- real ionoindx(806),indrz(806) real ig(3),rz(3) logical mess - - common /iounit/konsol,mess + + common /iounit/konsol,mess common /igrz/ionoindx,indrz,iymst,iymend iytmp=yr*100+mm @@ -8905,7 +8905,7 @@ c if((yr/4*4.eq.yr).and.(yr/100*100.ne.yr)) idd2=381 endif rz(2)=indrz(num+1) ig(2)=ionoindx(num+1) - rsn=(idn-idd1)*1./(idd2-idd1) + rsn=(idn-idd1)*1./(idd2-idd1) rz(3)=rz(1)+(rz(2)-rz(1))*rsn ig(3)=ig(1)+(ig(2)-ig(1))*rsn goto 1927 @@ -8941,26 +8941,26 @@ C .... .... C AAP(*,8) 3-hour Ap indices for the UT interval )21-6) C AAP(*,9) daily Ap C AF107(*,1) F10.7 radio flux for the day -C AF107(*,2) 81-day average of F10.7 radio flux +C AF107(*,2) 81-day average of F10.7 radio flux C AF107(*,3) 365-day average of F10.7 C N total number of records c c APF107.DAT is structured as follows: -c JY(I3),JMN(I3),JD(I3) year, month, day -c IIAP(8) (8I3) 3-hour Ap indices for the UT intervals +c JY(I3),JMN(I3),JD(I3) year, month, day +c IIAP(8) (8I3) 3-hour Ap indices for the UT intervals c (0-3(,(3-6(,(6-9(, .., (18-21(,(21-24( c IAPD (I3) daily Ap c IR (I3) sunspot number for the day (empty) c F107 (F5.1) F10.7 radio flux for the day -c F107_81 (F5.1) 81-day average of F10.7 radio flux -c F107_365 (F5.1) 365-day average of F10.7 centered on -c the date of interest. At start and end -c of index file it takes all available -c indices, e.g. for the first date the -c average is only over 40 F10.7 values -c and over 41 values on the 2nd date. -c -c If date is outside the range of the Ap indices file then IAP(1)=-5 +c F107_81 (F5.1) 81-day average of F10.7 radio flux +c F107_365 (F5.1) 365-day average of F10.7 centered on +c the date of interest. At start and end +c of index file it takes all available +c indices, e.g. for the first date the +c average is only over 40 F10.7 values +c and over 41 values on the 2nd date. +c +c If date is outside the range of the Ap indices file then IAP(1)=-5 C------------------------------------------------------------------------- C INTEGER aap(23000,9),iiap(8) @@ -8981,22 +8981,22 @@ c * FORM='FORMATTED',STATUS='OLD') * F107_365 10 FORMAT(3I3,9I3,I3,3F5.1) -c adate(i)=jy*10000+jmn*100+jd - do j=1,8 +c adate(i)=jy*10000+jmn*100+jd + do j=1,8 aap(i,j)=iiap(j) enddo aap(i,9)=iapda c irza(i)=ir if(F107_81.lt.-4.) F107_81=F107D if(F107_365.lt.-4.) F107_365=F107D - af107(i,1)=f107d - af107(i,2)=f107_81 + af107(i,1)=f107d + af107(i,2)=f107_81 af107(i,3)=f107_365 - i=i+1 + i=i+1 goto 1 21 n=i-1 - + CLOSE(13) return end @@ -9014,14 +9014,14 @@ c IAP(1) AP index for UT-39 hours. c c Gets indices from COMMON/APFA/ c -c If date is outside the range of the Ap indices file than IAP(1)=-5 +c If date is outside the range of the Ap indices file than IAP(1)=-5 c----------------------------------------------------------------------- INTEGER aap(23000,9),iiap(8),iap(13) DIMENSION af107(23000,3) LOGICAL mess COMMON /iounit/konsol,mess /apfa/aap,af107,nf107 - + do i=1,8 iap(i)=-1 enddo @@ -9031,7 +9031,7 @@ c----------------------------------------------------------------------- ihour=int(hour/3.)+1 if(ihour.gt.8) ihour=8 - if(is*8+ihour.lt.13) goto 21 ! less then 13 indices available + if(is*8+ihour.lt.13) goto 21 ! less then 13 indices available j1=13-ihour do i=1,ihour @@ -9046,7 +9046,7 @@ c----------------------------------------------------------------------- if(iapi.lt.-2) goto 21 iap(i)=iapi enddo - else + else j2=5-ihour do i=1,8 iapi=aap(is-1,i) @@ -9058,30 +9058,30 @@ c----------------------------------------------------------------------- if(iapi.lt.-2) goto 21 iap(i)=iapi enddo - endif + endif goto 20 - + 21 if(mess) write(konsol,100) 100 format(1X,'One of the ap indeces is negative.', & ' STORM model is turned off.') IAP(1)=-5 - + 20 RETURN END C C SUBROUTINE APFMSIS(ISDATE,HOUR,IAPO) c----------------------------------------------------------------------- -c Finds 3-hourly Ap indices for NRLMSIS00 model +c Finds 3-hourly Ap indices for NRLMSIS00 model c INPUTS: ISDATE Array-index from APF_ONLY c HOUR UT in decimal hours c OUTPUT: IAPO(1:7) 3-hourly Ap index -C +C C IAPO(1) DAILY AP -C IAPO(2) 3-HR AP INDEX FOR CURRENT TIME -C IAPO(3) 3-HR AP INDEX FOR 3 HRS BEFORE CURRENT TIME -C IAPO(4) 3-HR AP INDEX FOR 6 HRS BEFORE CURRENT TIME -C IAPO(5) 3-HR AP INDEX FOR 9 HRS BEFORE CURRENT TIME +C IAPO(2) 3-HR AP INDEX FOR CURRENT TIME +C IAPO(3) 3-HR AP INDEX FOR 3 HRS BEFORE CURRENT TIME +C IAPO(4) 3-HR AP INDEX FOR 6 HRS BEFORE CURRENT TIME +C IAPO(5) 3-HR AP INDEX FOR 9 HRS BEFORE CURRENT TIME C IAPO(6) AVERAGE OF EIGHT 3-HR AP INDICIES FROM 12 TO 33 HRS PRIOR C TO CURRENT TIME C IAPO(7) AVERAGE OF EIGHT 3 HR AP INDICIES FROM 36 TO 57 HRS PRIOR @@ -9089,8 +9089,8 @@ C TO CURRENT TIME c c The 3-hour UT intervals during the day are: (0-3),)3-6),)6-9),)9-12), c )12-15),)15-18),)18-21),)21-24(. -c -c If date is outside the range of the Ap indices file then IAPO(2)=-5 +c +c If date is outside the range of the Ap indices file then IAPO(2)=-5 c----------------------------------------------------------------------- c REAL IAPO @@ -9105,10 +9105,10 @@ c ihour=int(hour/3.)+1 if(ihour.gt.8) ihour=8 - iapo(1)=aap(is,9) + iapo(1)=aap(is,9) C There must be at least 20 indices available - if((is-1)*8+ihour.lt.20) goto 21 + if((is-1)*8+ihour.lt.20) goto 21 C assemble Ap values as needed by MSIS j1=ihour+1 @@ -9136,7 +9136,7 @@ C assemble Ap values as needed by MSIS enddo endif - do 25 i=1,4 + do 25 i=1,4 25 iapo(i+1)=iap(i)*1.0 sum1=0. @@ -9149,7 +9149,7 @@ c iapo(7)=int(sum2/8.+.5) iapo(6)=sum1/8. iapo(7)=sum2/8. goto 20 - + 21 if(mess) write(konsol,100) 100 format(1X,'APFMSIS: No Ap dependence because date is not', & ' covered by APF107.DAT indices file') @@ -9163,26 +9163,26 @@ C SUBROUTINE APF_ONLY(IYYYY,IMN,ID,F107D,F107PD,F107_81,F107_365, * IAPDA,ISDATE) c----------------------------------------------------------------------- -c Finds daily F10.7, daily Ap, and 81-day and 365-day F10.7 index: +c Finds daily F10.7, daily Ap, and 81-day and 365-day F10.7 index: c -c INPUTS: IYYYY (yyyy) year -c IMN (mm) month -c ID (dd) day -c OUTPUT: F107D F10.7 index for the day (adjusted +c INPUTS: IYYYY (yyyy) year +c IMN (mm) month +c ID (dd) day +c OUTPUT: F107D F10.7 index for the day (adjusted c to 1AU) C F107PD F10.7 index for one day prior (used in MSIS) c F107_81 F10.7 average over 3 solar rotations -c (81 days, centered on the current day) +c (81 days, centered on the current day) c F107_365 F10.7 12-month running mean c IAPDA Daily Ap c ISDATE Array-index for the specified date (for c use in APF subroutine. -c +c c Using COMMON/apfa/ for indices c c Is used for vdrift and foeedi. c -c If date is outside the range of indices file than F107D=F107_81=-11.1 +c If date is outside the range of indices file than F107D=F107_81=-11.1 c----------------------------------------------------------------------- INTEGER aap(23000,9),iiap(8),lm(12) @@ -9207,7 +9207,7 @@ c----------------------------------------------------------------------- do i=1,IMN-1 IS=IS+LM(i) ENDDO - + IS=IS+ID ISDATE = IS if(IS.gt.nf107) goto 21 @@ -9221,7 +9221,7 @@ c----------------------------------------------------------------------- if(F107_365.lt.-4.) F107_365=F107D IAPDA=AAP(is,9) goto 20 - + 21 if(mess) write(konsol,100) 100 format(1X,'APF_ONLY: Date is outside range of F10.7D indices', & ' file (F10.7D = F10.7_81 = F10.7RM12).') @@ -9229,10 +9229,10 @@ c----------------------------------------------------------------------- F107_81 = -11.1 F107_365 = -11.1 IAPDA = -11 - + 20 RETURN END -C +C C C----------------------STORM MODEL -------------------------------- C @@ -9241,7 +9241,7 @@ C C This subroutine converts a geographic latitude and longitude C location to a corrected geomagnetic latitude. C -C INPUT: +C INPUT: C geographic latitude -90. to +90. C geographic longitude 0. to 360. positive east from Greenwich. C @@ -9249,7 +9249,7 @@ C OUTPUT: C corrected geomagnetic latitude -90. to +90. - DIMENSION CORMAG(20,91) + DIMENSION CORMAG(20,91) DATA ((CORMAG(i,j),i=1,20),j=1,31)/ +163.68,163.68,163.68,163.68,163.68,163.68, +163.68,163.68,163.68,163.68,163.68,163.68,163.68,163.68, @@ -9486,12 +9486,12 @@ C corrected geomagnetic latitude -90. to +90. +008.15,008.15,008.15,008.15,008.15,008.15,008.15,008.15, +008.15,008.15,008.15,008.15,008.15,008.15/ -C Data Input +C Data Input rlan = rga - rlo = rgo - -C From "normal" geographic latitude -C to angle from South Pole. + rlo = rgo + +C From "normal" geographic latitude +C to angle from South Pole. rla = rlan + 90 IF (rlo .EQ. 360) THEN @@ -9500,31 +9500,31 @@ C to angle from South Pole. C PROXIMITY -C coefficients of the latitudinal points +C coefficients of the latitudinal points LA1 = (INT(rla/2)+1) LA2 = LA1 + 1 if(la2.gt.91) la2=91 -C coefficients of the longitudinal points +C coefficients of the longitudinal points LO1 = (INT(rlo/18)+1) corr LO2 = LO1 + 1 - LO2 = MOD(LO1,20) + 1 + LO2 = MOD(LO1,20) + 1 C Four points of Geomagnetic Coordinates gm1 = CORMAG(LO1,LA1) - gm2 = CORMAG(LO1,LA2) + gm2 = CORMAG(LO1,LA2) gm3 = CORMAG(LO2,LA1) gm4 = CORMAG(LO2,LA2) -C latitudinal points -C X1 = ABS(rla - (INT(rla))) +C latitudinal points +C X1 = ABS(rla - (INT(rla))) C X2 = 2. - X1 x = (rla/2.0 - (INT(rla/2.0))) -C longitudinal points -C Y1 = ABS(rlo - (INT(rlo))) +C longitudinal points +C Y1 = ABS(rlo - (INT(rlo))) C Y2 = 18. - Y1 - y =(rlo/18.0 - (INT(rlo/18.0))) + y =(rlo/18.0 - (INT(rlo/18.0))) C X AND Y VALUES C x = X1 / (X1 + X2) @@ -9536,7 +9536,7 @@ C INTERPOLATION C OUTPUT OF THE PROGRAM C From corrected geomagnetic latitude from North Pole -C to "normal" geomagnetic latitude. +C to "normal" geomagnetic latitude. rgma = 90. - gmla END @@ -9544,7 +9544,7 @@ c c SUBROUTINE STORM(ap,rga,rgo,coor,rgma,ut,doy,cf) C---------------------------------------------------------------------- -C Fortran code to obtain the foF2 storm-time correction factor at +C Fortran code to obtain the foF2 storm-time correction factor at C a given location and time, using the current and the 12 previous C ap values as input. C @@ -9554,9 +9554,9 @@ C in the array will contain the ap at the UT of interest, C the 12th value will contain the 1st three hourly interval C preceeding the time of interest, and so on to the 1st C ap value at the earliest time. -C coor --> (integer). If coor = 2, rga should contain the +C coor --> (integer). If coor = 2, rga should contain the C geomagnetic latitude. -C If coor = 1, rga should contain the +C If coor = 1, rga should contain the C geographic latitude. C rga ---> (real, -90 to 90) geographic or geomagnetic latitude. C rgo ---> (real, 0 to 360, positive east from Greenwich.) @@ -9569,8 +9569,8 @@ C rgma --> corrected magnetic latitude calculated from rga and rgo C C This model and computer code was developed by E. Araujo-Pradere, C T. Fuller-Rowell and M. Condrescu, SEC, NOAA, Boulder, USA -C Ref: -C T. Fuller-Rowell, E. Araujo-Pradere, and M. Condrescu, An +C Ref: +C T. Fuller-Rowell, E. Araujo-Pradere, and M. Condrescu, An C Empirical Ionospheric Storm-Time Ionospheric Correction Model, C Adv. Space Res. 8, 8, 15-24, 2000. C---------------------------------------------------------------------- @@ -9809,31 +9809,31 @@ C C EMPIRICAL STORM-E MODEL: COMPUTES A STORM-TO-QUIET RATIO (SQR) FACTOR C TO ADJUST THE QUIESCENT E-REGION PEAK ELECTRON DENSITY TO ACCOUNT FOR C ENHANCEMENTS DUE TO GEOMAGNETIC ACTIVITY. THE SQR FACTORS WERE -C COMPUTED FROM NO+ 4.3 UM VOLUME EMISSION RATES DERIVED FROM +C COMPUTED FROM NO+ 4.3 UM VOLUME EMISSION RATES DERIVED FROM C TIMED/SABER LIMB RADIANCE MEASUREMENTS. THE SABER-DERIVED SQR FACTORS -C WERE FIT TO POWE-LAW IN THE ap INDEX. +C WERE FIT TO POWE-LAW IN THE ap INDEX. C C INPUT PARAMETERS: C -C JDOY --- DAY OF YEAR (1-365) +C JDOY --- DAY OF YEAR (1-365) C XMLAT --- MAGNETIC LATITUDE (DEGREES) C AP --- ap INDEX C C OUTPUT PARAMETER -C +C C STORME_AP --- STORM-TO-QUIET RATIO (SQR) TO ADJUST QUIESCENT E-REGION C PEAK ELECTRON DENSITY TO ACCOUNT FOR GEOMAGNETIC C ENHANCEMENTS. SQR COMPUTED FROM A POWER-LAW FIT C IN AP-INDEX: SQR=C1*AP**C2+C3 C C REFERENCES: -C +C C (1) Mertens et al. [submitted to JASR, 2011] C (2) Fernandez et al. [JASR, Vol. 46, 2010] C (3) Mertens et al. [Proc. of SPIE, Vol. 7475, 2009] C (4) Mertens et al. [Proc. of SPIE, Vol. 6745, 2007] -C (5) Mertens et al. [JASR, Vol. 39, 2007] -C +C (5) Mertens et al. [JASR, Vol. 39, 2007] +C C SOFTWARE WRITTEN BY Christopher J. Mertens C NASA Langley Research Center C Atmospheric Sciences Competency @@ -9857,7 +9857,7 @@ C C JDOY | 0-79 ||80-171||172-264||265-354||355-365| C DATA ((C1(IML,IDB),IDB=1,NDBD),IML=1,NMLG) - & / 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, !-90.0 + & / 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, !-90.0 & 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, !-85.0 & 0.00000, 0.00508, 0.17360, 0.00000, 0.00000, !-80.0 & 0.00000, 0.31576, 0.31498, 0.00000, 0.00000, !-75.0 @@ -9893,7 +9893,7 @@ C & 0.06445, 0.00000, 0.00000, 0.10315, 0.06445, ! 75.0 & 0.00149, 0.00000, 0.00000, 0.00073, 0.00149, ! 80.0 & 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, ! 85.0 - & 0.00000, 0.00000, 0.00000, 0.00000, 0.00000/ ! 90.0 + & 0.00000, 0.00000, 0.00000, 0.00000, 0.00000/ ! 90.0 C C JDOY | 0-79 ||80-171||172-264||265-354||355-365| C @@ -9934,7 +9934,7 @@ C & 0.67340, 0.00000, 0.00000, 0.36809, 0.67340, ! 75.0 & 1.44025, 0.00000, 0.00000, 1.13529, 1.44025, ! 80.0 & 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, ! 85.0 - & 0.00000, 0.00000, 0.00000, 0.00000, 0.00000/ ! 90.0 + & 0.00000, 0.00000, 0.00000, 0.00000, 0.00000/ ! 90.0 C C JDOY | 0-79 ||80-171||172-264||265-354||355-365| C @@ -9977,7 +9977,7 @@ C & 1.00000, 1.00000, 1.00000, 1.00000, 1.00000, ! 85.0 & 1.00000, 1.00000, 1.00000, 1.00000, 1.00000/ ! 90.0 C -C ... Find Season-Averaged Coefficient Index +C ... Find Season-Averaged Coefficient Index C IDXS=0 IF(JDOY.LE.IDBD(1)) IDXS=1 @@ -9989,11 +9989,11 @@ C & 'PROBLEM FINDING SEASON-AVERAGED COEFFICIENT', & 'DAY OF YEAR = ',JDOY STORME_AP=-5.0 - GOTO 222 + GOTO 222 ENDIF C C ... Find Magnetic Latitude Coefficient Index -C +C IDXL=0 DELG=ABS(XMLG(1)-XMLG(2)) DELD=DELG/2.0 @@ -10007,7 +10007,7 @@ C IF((XMLAT.GT.YMM).AND.(XMLAT.LE.YMP)) IDXL=IL ENDDO IF(IDXL.EQ.0) THEN - if(mess) WRITE(konsol,*) 'ERROR IN STORME_AP: ', + if(mess) WRITE(konsol,*) 'ERROR IN STORME_AP: ', & 'PROBLEM FINDING MAGNETIC LATITUDE COEFFICIENT', & 'MAGNETIC LATITUDE(DEGREES) = ',XMLAT STORME_AP=-5.0 @@ -10015,36 +10015,36 @@ C ENDIF C C ... COMPUTE E-REGION ELECTRON DENSITY GEOMAGNETIC STORM ENHANCEMET -C ... FACTOR (i.e., THE STORM-TO-QUIET RATIO (SQR)) +C ... FACTOR (i.e., THE STORM-TO-QUIET RATIO (SQR)) C SQR=C1(IDXL,IDXS)*AP**(C2(IDXL,IDXS))+C3(IDXL,IDXS) IF(SQR.LT.1.0) SQR=1.0 STORME_AP=SQR - + 222 RETURN - END + END C C C**************************************************************************** C subroutine vdrift(xt,xl,param,y) C------------------------------------------------------------------- -C SUBROUTINE CALCULATES EQUATORIAL VERTICAL DRIFT AS DESCRIBED +C SUBROUTINE CALCULATES EQUATORIAL VERTICAL DRIFT AS DESCRIBED C IN SCHERLIESS AND FEJER, JGR, 104, 6829-6842, 1999 C C INPUT: XT: SOLAR LOCAL TIME [h] C XL: GEOGRAPHIC LONGITUDE (+ EAST) [degrees] -C +C C PARAM: 2-DIM ARRAY (DOY,F10.7CM) C DOY :Day of Year has to run from 1 to 365(366) C F10.7cm : F10.7cm solar flux (daily value) -C +C C OUTPUT: Y: EQUATORIAL VERTICAL DRIFT [m/s] C C------------------------------------------------------------------- c IMPLICIT REAL*8 (A-H,O-Z) IMPLICIT REAL (A-H,O-Z) - + c real*8 param(2),coeff(624),coeff1(594),coeff2(30),funct(6) c real*8 xt,xl,y c real*8 bspl4,bspl4_time,bspl4_long @@ -10055,7 +10055,7 @@ c real*8 bspl4,bspl4_time,bspl4_long integer i,j,ind,il,kk integer index_t,dim_t,index_l,dim_l,index,dim,nfunc - + data index_t/13/,dim_t/78/,index_l/8/,dim_l/48/,index/104/, * dim/624/,nfunc/6/ @@ -10166,10 +10166,10 @@ c real*8 bspl4,bspl4_time,bspl4_long * -27.09189,-21.85181,-20.34676, -0.05123, -0.05683, -0.07214, * -27.09561,-22.76383,-25.41151, -0.10272, -0.02058, -0.16720/ - do i=1,594 + do i=1,594 coeff(i)=coeff1(i) enddo - do i=1,30 + do i=1,30 coeff(i+594)=coeff2(i) enddo @@ -10196,7 +10196,7 @@ c real*8 function bspl4_time(i,x1) c ************************************************* c implicit REAL*8 (A-H,O-Z) implicit REAL (A-H,O-Z) - + integer i,order,j,k c real*8 t_t(0:39) c real*8 x,b(20,20),x1 @@ -10243,8 +10243,8 @@ C real function bspl4_long(i,x1) c real*8 function bspl4_long(i,x1) c ************************************************* -c implicit real*8 (A-H,O-Z) - implicit real (A-H,O-Z) +c implicit real*8 (A-H,O-Z) + implicit real (A-H,O-Z) integer i,order,j,k c real*8 t_l(0:24) @@ -10256,7 +10256,7 @@ c real*8 x,b(20,20),x1 * 0,10,100,190,200,250,280,310, * 360,370,460,550,560,610,640,670, * 720,730,820,910,920,970,1000,1030,1080/ - + order=4 x=x1 if(i.ge.0) then @@ -10370,7 +10370,7 @@ c IMPLICIT REAL*8(A-H,O-Z) IMPLICIT REAL(A-H,O-Z) c REAL*8 AE(1:366*24*4),Coff1(1:5,1:9),Coff15(1:6,1:9) REAL AE(1:366*24*4),Coff1(1:5,1:9),Coff15(1:6,1:9) - INTEGER FLAG + INTEGER FLAG DATA Coff1/ @ 0.0124,-0.0168,-0.0152,-0.0174,-0.0704, @ -0.0090,-0.0022,-0.0107, 0.0152,-0.0674, @@ -10403,7 +10403,7 @@ C dAEt_7P5=AE(t)-AE(t-15min); C dAEt_30=AE(t-15)-AE(t-45min); C dAEt_75=AE(t-45)-AE(t-105min); CC -C Following variables are the same to two resolution: +C Following variables are the same to two resolution: C AE1_6=average(AE(1-6hours)); C AE7_12=average(AE(7-12hours)); C AE1_12=average(AE(1-12hours)); @@ -10420,10 +10420,10 @@ C 0.46, AE1_12<70 nT; CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCccccccc C***************************************************** CC FLAG>0--> 1 h time resolution -C**************************************************** +C**************************************************** IF (FLAG.GT.0) THEN -C +C dAEt_30=AE(iP)-AE(iP-1) dAEt_90=AE(iP-1)-AE(iP-2) C @@ -10463,18 +10463,18 @@ C DO i=-22,-28,-1 AEd22_28S=AE(iP+i)-130.0D0 IF (AED22_28S.LE.0.0D0) AEd22_28S=0.0D0 - AEd22_28=AEd22_28+AEd22_28S + AEd22_28=AEd22_28+AEd22_28S END DO AEd22_28=AEd22_28/7.0D0 AEd22_28P=AEd22_28-200.0D0 IF (AEd22_28P.LE.0.0D0) AEd22_28P=0.0D0 CC - IF (AE1_6.GT.300.0D0) THEN + IF (AE1_6.GT.300.0D0) THEN Alfa=1.0D0 ELSE IF (AE1_6.GT.200.0D0) THEN ALfa=AE1_6/100.0D0-2.0D0 - ELSE + ELSE ALfa=0.0D0 ENDIF CC @@ -10520,7 +10520,7 @@ C******************************************************************** AE1_6=AE1_6/21.0D0 AEd1_6=AEd1_6/21.0D0 CC - AEd7_12=0.0D0 + AEd7_12=0.0D0 DO i=-28,-48,-1 AEd7_12s=AE(iP+i)-130.0 IF (AEd7_12s.LE.0) AEd7_12s=0.0 @@ -10533,7 +10533,7 @@ CC AE1_12=AE1_12+AE(iP+i) END DO AE1_12=AE1_12/45.0D0 -CC +CC AEd22_28=0.0D0 DO i=-88,-112,-1 AEd22_28s=AE(iP+i)-130. @@ -10546,18 +10546,18 @@ CC c AE1_6=0.0D0 c AEd1_6=0.0D0 -c AEd7_12=0.0D0 +c AEd7_12=0.0D0 c AEd22_28P=0.0D0 c AE1_12=0.0D0 c dAEt_7P5=400.D0 c dAEt_30=0.D0 c dAEt_75=0.D0 CC - IF (AE1_6.GT.300.0D0) THEN + IF (AE1_6.GT.300.0D0) THEN Alfa=1.0D0 ELSE IF (AE1_6.GT.200.0D0) THEN ALfa=AE1_6/100.0D0-2.0D0 - ELSE + ELSE ALfa=0.0D0 ENDIF CC @@ -10582,7 +10582,7 @@ CC Vd=PromptVd+DynamoVd ENDIF RETURN - END + END C C real function bspl4_ptime(i,x1) @@ -10632,11 +10632,11 @@ C*************************************************************************** C subroutine spreadf_brazil(idoy,idiy,f107,geolat,osfbr) -********************************************************************** +********************************************************************** * -* SUBROUTINE CALCULATES PERCENTAGE OF SPREAD F OCCURRENCE OVER +* SUBROUTINE CALCULATES PERCENTAGE OF SPREAD F OCCURRENCE OVER * BRAZILIAN SECTOR AS DESCRIBED IN: -* ABDU ET AL., Advances in Space Research, 31(3), +* ABDU ET AL., Advances in Space Research, 31(3), * 703-716, 2003 * * INPUT: @@ -10645,8 +10645,8 @@ C * F107: F10.7 cm SOLAR FLUX (DAILY VALUE) * GEOLAT: BRAZILIAN GEOGRAPHIC LATITUDE BETWEEN -4 AND -22.5 * -* OUTPUT: -* OSFBR(25): PERCENTAGE OF SPREAD F OCCURRENCE FOR 25 TIME +* OUTPUT: +* OSFBR(25): PERCENTAGE OF SPREAD F OCCURRENCE FOR 25 TIME * STEPS FROM LT=18 TO LT=7 ON THE NEXT DAY IN * STEPS OF 0.5 HOURS. * @@ -10654,7 +10654,7 @@ C * dimension param(3),osfbr(25),coef_sfa(684),coef_sfb(684), & sosf(2,32,3,12) - common/mflux/kf,n + common/mflux/kf,n data coef_sfa/ * 0.07,0.13,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.05,0.04,0.03 * ,0.06,0.07,0.02,0.03,0.03,0.07,0.06,0.07,0.21,0.28,0.34,0.16 @@ -10745,7 +10745,7 @@ C * ,0.62,0.59,0.44,0.01,0.00,0.01,0.00,0.00,0.13,0.52,0.77,0.63 * ,0.84,0.67,0.63,0.11,0.00,0.00,0.03,0.03,0.18,0.65,0.75,0.84 * ,0.81,0.63,0.47,0.06,0.02,0.00,0.00,0.05,0.14,0.49,0.76,0.91 - * ,0.58,0.63,0.47,0.09,0.00,0.07,0.01,0.04,0.15,0.48,0.68,0.61 + * ,0.58,0.63,0.47,0.09,0.00,0.07,0.01,0.04,0.15,0.48,0.68,0.61 * ,0.79,0.63,0.55,0.12,0.01,0.01,0.02,0.05,0.13,0.57,0.51,0.63 * ,0.72,0.54,0.43,0.11,0.02,0.00,0.00,0.09,0.16,0.39,0.59,0.72 * ,0.46,0.55,0.39,0.07,0.01,0.03,0.03,0.06,0.15,0.37,0.51,0.50 @@ -10795,24 +10795,24 @@ C do j=1,3 do k=1,12 sosf(1,i,j,k)=0. - sosf(2,i,j,k)=0. + sosf(2,i,j,k)=0. enddo enddo enddo -* +* kc=0 do i=5,23 do j=1,3 do k=1,12 kc=kc+1 sosf(1,i,j,k)=coef_sfa(kc) - sosf(2,i,j,k)=coef_sfb(kc) + sosf(2,i,j,k)=coef_sfb(kc) enddo enddo enddo - - kk=0 - do it=1600,3200,50 + + kk=0 + do it=1600,3200,50 slt=it/100. osft=0. do i=1,23 @@ -10827,19 +10827,19 @@ C do l=1,2 bspl4=bspl4t(i,slt)*bspl2s(j,param(1))* & bspl2l(l,param(3))*bspl2f(m,param(2)) - osft=osft+bspl4*sosf(l,il,ml,jl) + osft=osft+bspl4*sosf(l,il,ml,jl) enddo enddo enddo enddo if(slt.gt.17.98.and.slt.lt.30.01)then kk=kk+1 - osfbr(kk)=osft + osfbr(kk)=osft endif enddo * * - do iii=1,25 + do iii=1,25 if(osfbr(iii).gt.1.) osfbr(iii)=1. if(osfbr(iii).lt.0.) osfbr(iii)=0. enddo @@ -10958,7 +10958,7 @@ C * data ifnodes1 / 78, 77, 75, 79, 80, 77, 78, 80, 76, 81, 78, 78/ data ifnodes2 /144,140,139,142,139,146,142,139,150,151,150,157/ - data ifnodes3 /214,211,201,208,213,220,203,209,213,215,236,221/ + data ifnodes3 /214,211,201,208,213,220,203,209,213,215,236,221/ * ts(0)=ifnodes1(kf) ts(1)=ifnodes2(kf) @@ -10997,10 +10997,10 @@ C C function ckp(ap) C----------------------------------------------------------------------- -C Converts ap index (ap is integer variable varying from 0 to 400) into +C Converts ap index (ap is integer variable varying from 0 to 400) into C kp index (xkp is real variable varying from 0 to 9). Using standard C tables for deriving the 3-hourly ap index from the 3-hourly Kp index -C (e.g., http://www.ngdc.noaa.gov/stp/GEOMAG/kp_ap.shtml) +C (e.g., http://www.ngdc.noaa.gov/stp/GEOMAG/kp_ap.shtml) C----------------------------------------------------------------------- integer ap,ap_array @@ -11008,10 +11008,10 @@ C----------------------------------------------------------------------- dimension ap_array(28),kp_array(28),alap(28) data ap_array /0,2,3,4,5,6,7,9,12,15,18,22,27,32,39,48,56,67, & 80,94,111,132,154,179,207,236,300,400/ - + do 1256 i=2,28 1256 kp_array(i)=(i-1)/3. - + if(ap.eq.0) then ckp=0.0 return @@ -11026,7 +11026,7 @@ C----------------------------------------------------------------------- endif xl_ap=log(ap*1.0) - + i=8 1257 alap(i)=log(ap_array(i)*1.0) if(xl_ap.gt.alap(i)) then @@ -11035,31 +11035,31 @@ C----------------------------------------------------------------------- endif slope=(kp_array(i)-kp_array(i-1))/(alap(i)-alap(i-1)) - + ckp = kp_array(i) + slope * (xl_ap - alap(i)) - + return end -C -C +C +C subroutine auroral_boundary(xkp,xmlt,cgmlat,ab_mlat) C----------------------------------------------------------------------- C Computes equatorward auroral boundary values for givern kp value. -C kp given in units of 0.1 (xkp) for the range from 0.0 to 9.0. Model +C kp given in units of 0.1 (xkp) for the range from 0.0 to 9.0. Model C values are only used for kp=0,1,2,3,4,5,6,7,8,9 and a linear inter- C polation is applied for intermediate kp values. -C -C The auroral oval boundary is given as an array for corrected magnetic -C latitude CGM (ab_mlat). The 48 values correspond to the MLT values +C +C The auroral oval boundary is given as an array for corrected magnetic +C latitude CGM (ab_mlat). The 48 values correspond to the MLT values C of 0.0,0.5,1.0,1.5,2.0 .. 23.5. If the input xmlt is greater than -C -1, then the program determines the CGM latitude, cgmlat, that +C -1, then the program determines the CGM latitude, cgmlat, that C corresponds to the given MLT value (xmlt). C -C Y. Zhang and L.J. Paxton, An empirical Kp-dependent global auroral -C model based on TIMED/GUVI FUV data, Journal of Atmospheric and +C Y. Zhang and L.J. Paxton, An empirical Kp-dependent global auroral +C model based on TIMED/GUVI FUV data, Journal of Atmospheric and C Solar-Terrestrial Physics 70, 1231–1242, 2008. -C -C----------------------------------------------------------------------- +C +C----------------------------------------------------------------------- dimension zp_mlat(48,10),ab_mlat(48),ab_mlt(48) @@ -11105,34 +11105,34 @@ C----------------------------------------------------------------------- * 57.4,56.1,54.9,54.1,53.5,52.8,51.8,50.8,50.1,49.7,49.8,50.4, * 50.9,50.9,50.3,49.7,49.3,49.2,49.3,49.4,49.5,49.6,49.8,50.2/ - + if(xkp.gt.9.0) xkp=9.0 kp1=int(xkp)+1 xkp1=int(xkp)*1.0 kp2=kp1+1 if(kp2.gt.10) kp2=10 - do i=1,48 + do i=1,48 ab_mlat(i)=zp_mlat(i,kp1)+(xkp-xkp1)* & (zp_mlat(i,kp2)-zp_mlat(i,kp1)) enddo - + cgmlat=-99.99 if(xmlt.lt.0.0) return - - do i=1,48 + + do i=1,48 ab_mlt(i)=(i-1)*.5 enddo i1=int(xmlt/0.5)+1 if(i1.ge.48) i1=1 i2=i1+1 - + s1=(zp_mlat(i2,kp1)-zp_mlat(i1,kp1))/(ab_mlt(i2)-ab_mlt(i1)) zmlkp1=zp_mlat(i1,kp1)+(xmlt-ab_mlt(i1))*s1 s2=(zp_mlat(i2,kp2)-zp_mlat(i1,kp2))/(ab_mlt(i2)-ab_mlt(i1)) zmlkp2=zp_mlat(i1,kp2)+(xmlt-ab_mlt(i1))*s2 - + cgmlat=zmlkp1+(xkp-xkp1)*(zmlkp2-zmlkp1) return end diff --git a/RMextract/pyiri/iriget.for b/RMextract/pyiri/iriget.for index 5f9c2a0..1df7a0c 100644 --- a/RMextract/pyiri/iriget.for +++ b/RMextract/pyiri/iriget.for @@ -4,19 +4,19 @@ c iriget.for, version number can be found at the end of this comment. c----------------------------------------------------------------------- c c test program for the iri_sub subroutine -c +c LOGICAL JF(50) DIMENSION OARR(100),OUTF(20,1000) CHARACTER path*200 call set_datapath(path) call read_ig_rz call readapf107 - + c calling IRI subroutine -c +c call iri_sub(JF,JMAG,ALATI,ALONG,IYYYY,MMDD,DHOUR, & HEIBEG,HEIEND,HEISTP,OUTF,OARR) - + RETURN end @@ -27,15 +27,15 @@ c iriget.for, version number can be found at the end of this comment. c----------------------------------------------------------------------- c c test program for the iri_tec subroutine -c +c LOGICAL JF(50) CHARACTER path*200 call set_datapath(path) call read_ig_rz call readapf107 - + c calling IRI subroutine -c +c call irit13(ALATI,ALONG,jmag,jf,iyyyy,mmdd,dhour,heibeg,heiend, & tec,tecb,tect) diff --git a/RMextract/pyiri/irisub.for b/RMextract/pyiri/irisub.for index d288261..3ec8fc9 100644 --- a/RMextract/pyiri/irisub.for +++ b/RMextract/pyiri/irisub.for @@ -1,14 +1,14 @@ c irisub.for, version number can be found at the end of this comment. -c----------------------------------------------------------------------- +c----------------------------------------------------------------------- C Includes subroutine IRI_SUB to compute IRI parameters for specified C location, date, time, and altitude range and subroutine and subroutine -C IRI_WEB to computes IRI parameters for specified location, date, time -C and variable range; variable can be altitude, latitude, longitude, -C year, month, day of month, day of year, or hour (UT or LT). -C IRI_WEB requires IRI_SUB. Both subroutines require linking with the -c following files: IRIFUN.FOR, IRITEC.FOR, IRIDREG.FOR, +C IRI_WEB to computes IRI parameters for specified location, date, time +C and variable range; variable can be altitude, latitude, longitude, +C year, month, day of month, day of year, or hour (UT or LT). +C IRI_WEB requires IRI_SUB. Both subroutines require linking with the +c following files: IRIFUN.FOR, IRITEC.FOR, IRIDREG.FOR, c IRIFLIP.FOR CIRA.FOR, IGRF.FOR -c----------------------------------------------------------------------- +c----------------------------------------------------------------------- c Programs using subroutine IRI_SUB need to include (see IRITEST.FOR): c c call read_ig_rz @@ -20,18 +20,18 @@ c do i=1,100 c oar(i,1)=-1.0 c enddo c -c -c----------------------------------------------------------------------- -c Required i/o units: +c +c----------------------------------------------------------------------- +c Required i/o units: c KONSOL= 6 IRISUB: Program messages (used when jf(12)=.true. -> konsol) c IUCCIR=10 IRISUB: CCIR and URSI coefficients (CCIR%%.ASC, %%=month+10) c KONSOL=11 IRISUB: Program messages (used when jf(12)=.false. -> MESSAGES.TXT) -c KONSOL=6/11 is also used in IRIFUN and IGRF. COMMON/iounit/konsol,mess +c KONSOL=6/11 is also used in IRIFUN and IGRF. COMMON/iounit/konsol,mess c is used to pass the value of KONSOL. If mess=false messages are turned off. -c UNIT=12 IRIFUN/TCON: Solar/ionospheric indices IG12, R12 (IG_RZ.DAT) -c UNIT=13 IRIFUN/APF..: Magnetic indices and F10.7 (APF107.DAT +c UNIT=12 IRIFUN/TCON: Solar/ionospheric indices IG12, R12 (IG_RZ.DAT) +c UNIT=13 IRIFUN/APF..: Magnetic indices and F10.7 (APF107.DAT c UNIT=14 IGRF/GETSHC: IGRF coeff. (DGRF%%%%.DAT or IGRF%%%%.DAT, %%%%=year) -c----------------------------------------------------------------------- +c----------------------------------------------------------------------- C CHANGES FROM IRIS11.FOR TO IRIS12.FOR: C - CIRA-1986 INSTEAD OF CIRA-1972 FOR NEUTRAL TEMPERATURE C - 10/30/91 VNER FOR NIGHTTIME LAY-VERSION: ABS(..) @@ -75,7 +75,7 @@ C - 5/29/99 the limit for IG comp. from Rz12-input is 174 not 274 C - 11/08/99 jf(18)=t simple UT to LT conversion, otherwise UT_LT C - 11/09/99 added COMMON/const1/humr,dumr also for CIRA86 C CHANGES FROM IRIS13.FOR TO IRISUB.FOR: -c----------------------------------------------------------------------- +c----------------------------------------------------------------------- C-Version-MM/DD/YY-Description (person reporting correction) C 2000.01 05/09/00 B0_98 replaces B0_TAB and B1: 1.9/day to 2.6/night C 2000.02 06/11/00 including new F1 and indermediate region @@ -84,7 +84,7 @@ C 2000.04 10/29/00 include special option for D region models C 2000.05 12/07/00 change name IRIS13 to IRISUB C 2000.06 12/14/00 jf(30),outf(20,100),oarr(50) C 2000.07 03/17/01 include Truhlik-Triskova Te model and IGRF -C 2000.08 05/07/01 include Fuller-Rowell-Condrescu storm model +C 2000.08 05/07/01 include Fuller-Rowell-Condrescu storm model C 2000.09 07/09/01 LATI instead of LAT1 in F00 call -------- M. Torkar C 2000.10 07/09/01 sdte instead of dte in ELTEIK call --- P. Wilkinson C 2000.11 09/18/01 correct computation of foF2 for Rz12 user input @@ -98,27 +98,27 @@ C 2000.18 02/06/03 jf(27) for IG12 user input; all F1 prob in oar C 2000.19 07/14/04 covsat<188 instead of covsat= outf(500), numhei=numstp=500 +C 2007.02 10/31/08 outf(100) -> outf(500), numhei=numstp=500 C 2007.03 02/12/09 Jf(24)=.false.-> outf(1,60-140km)=FIRI- M. Friedrich C 2007.04 03/14/09 SOCO(70->80;500->300km) --------------- R. Davidson C 2007.05 03/26/09 call for APF_ONLY includes F107M C 2007.09 08/17/09 STROM off if input; fof2in, fof1in,foein corr C 2007.10 02/03/10 F10.7D = F10.7M = COV if EOF -C 2007.11 04/19/10 Corrections in irifun.for, cira.for -C 2007.12 11/23/10 FNIGHT computed twice at 8334 --------- C. Vasly +C 2007.11 04/19/10 Corrections in irifun.for, cira.for +C 2007.12 11/23/10 FNIGHT computed twice at 8334 --------- C. Vasly C C 2012.00 10/05/11 IRI-2012: bottomside B0 B1 model (SHAMDB0D, SHAB1D), C 2012.00 10/05/11 bottomside Ni model (iriflip.for), auroral foE C 2012.00 10/05/11 storm model (storme_ap), Te with PF10.7 (elteik), -C 2012.00 10/05/11 oval kp model (auroral_boundary),IGRF-11(igrf.for), +C 2012.00 10/05/11 oval kp model (auroral_boundary),IGRF-11(igrf.for), C 2012.00 10/05/11 NRLMSIS00 (cira.for), CGM coordinates, F10.7 daily C 2012.00 10/05/11 81-day 365-day indices (apf107.dat), ap->kp (ckp), C 2012.00 10/05/11 array size change jf(50) outf(20,1000), oarr(100). @@ -134,7 +134,7 @@ C 2012.03 02/13/13 Move B1 before B0 for Gulyaeva-1987 C 2012.03 02/20/13 Use foot-point for CGM to be closer to AACGM C 2012.03 02/20/13 DAT(11,*) is UT time of MLT=0 C 2012.04 09/12/13 Replace HOUR with HOURUT in APFMSIS ---- P. Coisson -C 2012.05 01/22/14 TMAXN in GTD7 SEC->SECNI HOUR->0.0 +C 2012.05 01/22/14 TMAXN in GTD7 SEC->SECNI HOUR->0.0 C 2012.06 07/17/14 Change estromcor to estormcor -------- A.Shabanloui C 2012.07 07/24/14 COMMON/iounit/: added 'mess' C 2012.08 09/18/14 JF(18): FIELDG not UT_LT ............... A.Mazzella @@ -169,8 +169,8 @@ C 2016.13 01/26/17 B1 user input; 0.6 F10.7_81=F10.7Din -C 2016.16 10/27/17 F10.7_81in and not F10.7Din -> F10.7D=F10.7_81in +C 2016.16 10/27/17 F10.7Din and not F10.7_81in -> F10.7_81=F10.7Din +C 2016.16 10/27/17 F10.7_81in and not F10.7Din -> F10.7D=F10.7_81in C 2016.17 10/30/17 OARR(87,88)=SAX300,SUX300 C 2016.18 03/22/18 f107in, f107ino, f107_81in, f107_81ino M. Butala C 2016.18 03/22/18 f107yo -> f107yobs, f10781o -> f10781obs @@ -189,8 +189,8 @@ C 2016.25 06/11/19 comments for OARR and output incl HNEA and HNEE C 2020.01 07/03/19 changed argmax to 87.3 (consistent with IDL) C 2020.01 07/03/19 itopn=1 now with PF10.7 correction C 2020.02 07/19/19 itopn=1 cor option, itopn=3 cor2 option -C 2020.03 07/29/19 added 'endif' itopn=3 and declared a01(2,2) -C 2020.04 08/05/19 itopn=3 requires itopn=1, BLO11 change +C 2020.03 07/29/19 added 'endif' itopn=3 and declared a01(2,2) +C 2020.04 08/05/19 itopn=3 requires itopn=1, BLO11 change C 2020.05 01/16/20 ion composition topside if h.ge.300km C C***************************************************************** @@ -209,7 +209,7 @@ C JMAG =0 geographic = 1 geomagnetic coordinates C ALATI,ALONG LATITUDE NORTH AND LONGITUDE EAST IN DEGREES C IYYYY Year as YYYY, e.g. 1985 C MMDD (-DDD) DATE (OR DAY OF YEAR AS A NEGATIVE NUMBER) -C DHOUR LOCAL TIME (OR UNIVERSAL TIME + 25) IN DECIMAL +C DHOUR LOCAL TIME (OR UNIVERSAL TIME + 25) IN DECIMAL C HOURS C HEIBEG, HEIGHT RANGE IN KM; maximal 100 heights, i.e. C HEIEND,HEISTP int((heiend-heibeg)/heistp)+1.le.100 @@ -224,7 +224,7 @@ C 3 Ne & Ni computed Ni not computed t C 4 B0,B1 - Bil-2000 B0,B1 - other models jf(31) false C 5 foF2 - CCIR foF2 - URSI false C 6 Ni - DS-1995 & DY-1985 Ni - RBV-2010 & TBT-2015 false -C 7 Ne - Tops: f10.7<188 f10.7 unlimited t +C 7 Ne - Tops: f10.7<188 f10.7 unlimited t C 8 foF2 from model foF2 or NmF2 - user input t C 9 hmF2 from model hmF2 or M3000F2 - user input t C 10 Te - Standard Te - Using Te/Ne correlation t @@ -248,9 +248,9 @@ C 26 foF2 storm model no storm updating t C 27 IG12 from file IG12 - user t C 28 spread-F probability not computed false C 29 IRI01-topside new options as def. by JF(30) false -C 30 IRI01-topside corr. NeQuick topside model false +C 30 IRI01-topside corr. NeQuick topside model false C (29,30) = (t,t) IRIold, (f,t) IRIcor, (f,f) NeQuick, (t,f) IRIcor2 -C 31 B0,B1 ABT-2009 B0 Gulyaeva-1987 h0.5 t +C 31 B0,B1 ABT-2009 B0 Gulyaeva-1987 h0.5 t C (4,31) = (t,t) Bil-00, (f,t) ABT-09, (f,f) Gul-87, (t,f) not used C 32 F10.7_81 from file F10.7_81 - user input (oarr(46)) t C 33 Auroral boundary model on/off true/false false @@ -269,10 +269,10 @@ C 44 B1 from model B1 user input in OARR(35) t C 45 HNEA=65/80km dya/night HNEA user input in OARR(89) t C 46 HNEE=2000km HNEE user input in OARR(90) t C .... -C 50 +C 50 C ------------------------------------------------------------------ C -C Depending on the jf() settings additional INPUT parameters may +C Depending on the jf() settings additional INPUT parameters may c be required: C C Setting INPUT parameter @@ -280,11 +280,11 @@ C ----------------------------------------------------------------- C jf(8) =.false. OARR(1)=user input for foF2/MHz or NmF2/m-3 C jf(9) =.false. OARR(2)=user input for hmF2/km or M(3000)F2 C jf(10 )=.false. OARR(15),OARR(16)=user input for Ne(300km), -C Ne(400km)/m-3. Use OARR()=-1 if one of these values is not +C Ne(400km)/m-3. Use OARR()=-1 if one of these values is not C available. If jf(23)=.false. then Ne(300km), Ne(550km)/m-3. -C jf(13) =.false. OARR(3)=user input for foF1/MHz or NmF1/m-3 +C jf(13) =.false. OARR(3)=user input for foF1/MHz or NmF1/m-3 C jf(14) =.false. OARR(4)=user input for hmF1/km -C jf(15) =.false. OARR(5)=user input for foE/MHz or NmE/m-3 +C jf(15) =.false. OARR(5)=user input for foE/MHz or NmE/m-3 C jf(16) =.false. OARR(6)=user input for hmE/km C jf(17) =.flase. OARR(33)=user input for Rz12 C jf(25) =.false. OARR(41)=user input for daily F10.7 index @@ -301,7 +301,7 @@ C OUTF(1,*) ELECTRON DENSITY/M-3 C OUTF(2,*) NEUTRAL TEMPERATURE/K C OUTF(3,*) ION TEMPERATURE/K C OUTF(4,*) ELECTRON TEMPERATURE/K -C OUTF(5,*) O+ ION DENSITY/% or /M-3 if jf(22)=f +C OUTF(5,*) O+ ION DENSITY/% or /M-3 if jf(22)=f C OUTF(6,*) H+ ION DENSITY/% or /M-3 if jf(22)=f C OUTF(7,*) HE+ ION DENSITY/% or /M-3 if jf(22)=f C OUTF(8,*) O2+ ION DENSITY/% or /M-3 if jf(22)=f @@ -309,18 +309,18 @@ C OUTF(9,*) NO+ ION DENSITY/% or /M-3 if jf(22)=f C AND, IF JF(6)=.FALSE.: C OUTF(10,*) CLUSTER IONS DEN/% or /M-3 if jf(22)=f C OUTF(11,*) N+ ION DENSITY/% or /M-3 if jf(22)=f -C OUTF(12,*) -C OUTF(13,*) -C if(jf(24) OUTF(14,1:11) standard IRI-Ne for 60,65,..,110km -C =.false.) 12:22) Friedrich (FIRI) model at these heights -C 23:33) standard Danilov (SW=0, WA=0) -C 34:44) for minor Stratospheric Warming (SW=0.5) -C 45:55) for major Stratospheric Warming (SW=1) +C OUTF(12,*) +C OUTF(13,*) +C if(jf(24) OUTF(14,1:11) standard IRI-Ne for 60,65,..,110km +C =.false.) 12:22) Friedrich (FIRI) model at these heights +C 23:33) standard Danilov (SW=0, WA=0) +C 34:44) for minor Stratospheric Warming (SW=0.5) +C 45:55) for major Stratospheric Warming (SW=1) C 56:66) weak Winter Anomaly (WA=0.5) conditions C 67:77) strong Winter Anomaly (WA=1) conditions C OUTF(15-20,*) free c -C OARR(1:100) ADDITIONAL OUTPUT PARAMETERS +C OARR(1:100) ADDITIONAL OUTPUT PARAMETERS C C #OARR(1) = NMF2/M-3 #OARR(2) = HMF2/KM C #OARR(3) = NMF1/M-3 #OARR(4) = HMF1/KM @@ -341,13 +341,13 @@ C OARR(31) = ISEASON (1=spring) OARR(32) = Geographic longitude C #OARR(33) = Rz12 OARR(34) = Covington Index C #OARR(35) = B1 OARR(36) = M(3000)F2 C $OARR(37) = TEC/m-2 $OARR(38) = TEC_top/TEC*100. -C #OARR(39) = gind (IG12) OARR(40) = F1 probability +C #OARR(39) = gind (IG12) OARR(40) = F1 probability C #OARR(41) = F10.7 daily OARR(42) = c1 (F1 shape) -C OARR(43) = daynr OARR(44) = equatorial vertical +C OARR(43) = daynr OARR(44) = equatorial vertical C OARR(45) = foF2_storm/foF2_quiet ion drift in m/s -C #OARR(46) = F10.7_81 OARR(47) = foE_storm/foE_quiet -C OARR(48) = spread-F probability -C OARR(49) = Geomag. latitude OARR(50) = Geomag. longitude +C #OARR(46) = F10.7_81 OARR(47) = foE_storm/foE_quiet +C OARR(48) = spread-F probability +C OARR(49) = Geomag. latitude OARR(50) = Geomag. longitude C OARR(51) = ap at current time OARR(52) = daily ap C OARR(53) = invdip/degree OARR(54) = MLT-Te C OARR(55) = CGM-latitude OARR(56) = CGM-longitude @@ -364,14 +364,14 @@ C OARR(75) = CGM-lati(MLT=16) OARR(76) = CGM-lati for MLT=17 C OARR(77) = CGM-lati(MLT=18) OARR(78) = CGM-lati for MLT=19 C OARR(79) = CGM-lati(MLT=20) OARR(80) = CGM-lati for MLT=21 C OARR(81) = CGM-lati(MLT=22) OARR(82) = CGM-lati for MLT=23 -C OARR(83) = Kp at current time OARR(84) = magnetic declination -C OARR(85) = L-value OARR(86) = dipole moment -C OARR(87) = SAX300 OARR(88) = SUX300 -C #OARR(89) = HNEA #OARR(90) = HNEE +C OARR(83) = Kp at current time OARR(84) = magnetic declination +C OARR(85) = L-value OARR(86) = dipole moment +C OARR(87) = SAX300 OARR(88) = SUX300 +C #OARR(89) = HNEA #OARR(90) = HNEE C # INPUT as well as OUTPUT parameter C $ special for IRIWeb (only place-holders) C for more details got to end of subroutine -c----------------------------------------------------------------------- +c----------------------------------------------------------------------- C***************************************************************** C*** THE ALTITUDE LIMITS ARE: LOWER (DAY/NIGHT) UPPER *** C*** ELECTRON DENSITY 60/80 KM 1500 KM *** @@ -389,7 +389,7 @@ C***************************************************************** C***************************************************************** C***************************************************************** INTEGER DAYNR,DDO,DO2,SEASON,SEADAY - REAL LATI,LONGI,MO2,MO,MODIP,NMF2,MAGBR,INVDIP,IAPO, + REAL LATI,LONGI,MO2,MO,MODIP,NMF2,MAGBR,INVDIP,IAPO, & NMF1,NME,NMD,MM,MLAT,MLONG,NMF2S,NMES,INVDPC, & INVDIP_OLD,INVDPC_OLD CHARACTER FILNAM*12 @@ -414,15 +414,15 @@ c CHARACTER FILNAM*53 COMMON /CONST/UMR,PI /const1/humr,dumr /ARGEXP/ARGMAX & /IGRF1/ERA,AQUAD,BQUAD,DIMO - & /BLOCK1/HMF2,NMF2S,HMF1,F1REG /BLOCK2/B0,B1,C1 - & /BLOCK3/HZ,T,HST /BLOCK4/HME,NMES,HEF + & /BLOCK1/HMF2,NMF2S,HMF1,F1REG /BLOCK2/B0,B1,C1 + & /BLOCK3/HZ,T,HST /BLOCK4/HME,NMES,HEF & /BLOCK5/ENIGHT,E /BLOCK6/HMD,NMD,HDX & /BLOCK7/D1,XKK,FP30,FP3U,FP1,FP2 - & /BLOCK8/HS,TNHS,XSM,MM,DTI,MXSM + & /BLOCK8/HS,TNHS,XSM,MM,DTI,MXSM & /BLOTE/AHH,ATE1,STTE,DTE - & /BLO10/BETA,ETA,DELTA,ZETA /findRLAT/FLON,RYEAR -c & /BLO11/B2TOP,TC3,itopn,alg10,hcor1,tcor2 - & /BLO11/B2TOP,itopn,tcor + & /BLO10/BETA,ETA,DELTA,ZETA /findRLAT/FLON,RYEAR +c & /BLO11/B2TOP,TC3,itopn,alg10,hcor1,tcor2 + & /BLO11/B2TOP,itopn,tcor & /iounit/konsol,mess /CSW/SW(25),ISW,SWC(25) & /QTOP/Y05,H05TOP,QF,XNETOP,XM3000,HHALF,TAU COMMON /path/datapath @@ -433,10 +433,10 @@ c & /BLO11/B2TOP,TC3,itopn,alg10,hcor1,tcor2 DATA icalls/0/ save - + mess=jf(34) - -c set switches for NRLMSIS00 + +c set switches for NRLMSIS00 ISW=0 do 6492 KI=1,25 6492 SWMI(KI)=1. @@ -447,7 +447,7 @@ c set switches for NRLMSIS00 7397 OUTF(KI,kk)=-1. C C oarr(1:6,10,15,16,33,35,39,41,46,89,90) are used for inputs -C +C oarr(7)=-1. oarr(8)=-1. oarr(9)=-1. @@ -489,14 +489,14 @@ C ut0=-1 ursifo=.true. C Initialize parameters for COMMON/IGRF1/ -C ERA EARTH RADIUS (WGS-84: 6371.137 KM) +C ERA EARTH RADIUS (WGS-84: 6371.137 KM) C EREQU MAJOR HALF AXIS FOR EARTH ELLIPSOID (6378.160 KM) C ERPOL MINOR HALF AXIS FOR EARTH ELLIPSOID (6356.775 KM) C AQUAD SQUARE OF MAJOR HALF AXIS FOR EARTH ELLIPSOID C BQUAD SQUARE OF MINOR HALF AXIS FOR EARTH ELLIPSOID C EEXC Eccentricity of Earth's orbit -C DIMO Earth's dipole moment in Gauss -C ERA, EREQU and ERPOL as recommended by the INTERNATIONAL +C DIMO Earth's dipole moment in Gauss +C ERA, EREQU and ERPOL as recommended by the INTERNATIONAL C ASTRONOMICAL UNION . ERA=6371.2 EREQU=6378.16 @@ -506,7 +506,7 @@ C ASTRONOMICAL UNION . EEXC=0.01675 dimo=0.311653 endif - + numhei=int(abs(heiend-heibeg)/abs(heistp))+1 if(numhei.gt.nummax) numhei=nummax C @@ -546,7 +546,7 @@ C IUCCIR=UNIT NUMBER FOR CCIR COEFFICIENTS ........................ c IUCCIR=10 c-web- special for web version -c-web- messages should be turned off with mess=jf(34)=.false. +c-web- messages should be turned off with mess=jf(34)=.false. KONSOL=6 if(.not.jf(12).and.mess) then @@ -576,7 +576,7 @@ c else oarr(33)=-1. ENDIF - + IGIN=(.not.jf(27)) IF(IGIN) THEN AIGIN=OARR(39) @@ -611,12 +611,12 @@ c c Topside density .................................................... c if(jf(29)) then - if (jf(30)) then + if (jf(30)) then itopn=0 ! IRI2001 topside option else itopn=3 ! IRI-cor2 topside option endif - else + else if (jf(30)) then itopn=1 ! IRI-cor topside option else @@ -719,8 +719,8 @@ C IF(TENEOP) THEN DO 8154 JXNAR=1,2 XNAR(JXNAR)=OARR(JXNAR+14) - TECON(JXNAR)=.FALSE. -8154 IF(XNAR(JXNAR).GT.0.) TECON(JXNAR)=.TRUE. + TECON(JXNAR)=.FALSE. +8154 IF(XNAR(JXNAR).GT.0.) TECON(JXNAR)=.TRUE. else oarr(15)=-1. oarr(16)=-1. @@ -730,69 +730,69 @@ c lists the selected options before starting the table c if(icalls.ge.1.or.(.not.mess)) goto 8201 - write(konsol,2911) + write(konsol,2911) if(NODEN) goto 2889 - if(LAYVER) write(konsol,9012) - if(OLD79) write(konsol,9014) + if(LAYVER) write(konsol,9012) + if(OLD79) write(konsol,9014) if (itopn.eq.0) write(konsol,9207) if (itopn.eq.1) write(konsol,9204) if (itopn.eq.2) write(konsol,9205) if (itopn.eq.3) write(konsol,9206) if(FOF2IN) then - write(konsol,9015) + write(konsol,9015) goto 2889 endif if(URSIF2) then - write(konsol,9016) + write(konsol,9016) else - write(konsol,9017) + write(konsol,9017) endif - if(HMF2IN) write(konsol,9018) - if(fof1in) write(konsol,9019) - if(HMF1IN.and.LAYVER) write(konsol,9021) + if(HMF2IN) write(konsol,9018) + if(fof1in) write(konsol,9019) + if(HMF1IN.and.LAYVER) write(konsol,9021) if(jf(4)) then write(konsol,9214) - else + else if (jf(31)) then write(konsol,9216) else write(konsol,9215) endif endif - if(foein) write(konsol,9022) - if(HMEIN) write(konsol,9023) - if(B0IN) write(konsol,9923) - if(B1IN) write(konsol,9927) + if(foein) write(konsol,9022) + if(HMEIN) write(konsol,9023) + if(B0IN) write(konsol,9923) + if(B1IN) write(konsol,9927) if(F1_OCPRO) then - write(konsol,9024) + write(konsol,9024) if(F1_L_COND) write(konsol,9025) endif - if(.not.f1_ocpro.and.f1_l_cond) write(konsol,2917) - if(DREG) then - write(konsol,9026) + if(.not.f1_ocpro.and.f1_l_cond) write(konsol,2917) + if(DREG) then + write(konsol,9026) else - write(konsol,9027) + write(konsol,9027) endif if(jf(26)) then - if(fof2in) then - write(konsol,9028) + if(fof2in) then + write(konsol,9028) jf(26)=.false. else - write(konsol,9029) + write(konsol,9029) endif endif 2889 continue - if((.not.NOION).and.(RBTT)) write(konsol,9031) - if((.not.NOION).and.(.not.RBTT)) write(konsol,9039) + if((.not.NOION).and.(RBTT)) write(konsol,9031) + if((.not.NOION).and.(.not.RBTT)) write(konsol,9039) if(NOTEM) goto 8201 - if(TENEOP) write(konsol,9032) - if(jf(23)) then - write(konsol,9033) + if(TENEOP) write(konsol,9032) + if(jf(23)) then + write(konsol,9033) else - write(konsol,9034) + write(konsol,9034) endif if(jf(33)) then @@ -850,14 +850,14 @@ c 8201 continue C -C CALCULATION OF DAY OF YEAR OR MONTH/DAY AND DECIMAL YEAR -c NRDAYM is the number of days in the current month +C CALCULATION OF DAY OF YEAR OR MONTH/DAY AND DECIMAL YEAR +c NRDAYM is the number of days in the current month c IDAYY is the number of days in the current year c c leap year rule: years evenly divisible by 4 are leap years, except -c years also evenly divisible by 100 are not leap years, except years -c also evenly divisible by 400 are leap years. The year 2000 is a 100 -c and 400 year exception and therefore it is a normal leap year. +c years also evenly divisible by 100 are not leap years, except years +c also evenly divisible by 400 are leap years. The year 2000 is a 100 +c and 400 year exception and therefore it is a normal leap year. c The next 100 year exception will be in the year 2100! c @@ -886,16 +886,16 @@ C calculate center height for CGM computation C height_center=(HEIBEG+HEIEND)/2. - + C -C CALCULATION OF GEODETIC/GEOMAGNETIC COORDINATES (LATI, LONGI AND -C MLAT, MLONG), MAGNETIC INCLINATION (DIP), DIP LATITUDE (MAGBR) +C CALCULATION OF GEODETIC/GEOMAGNETIC COORDINATES (LATI, LONGI AND +C MLAT, MLONG), MAGNETIC INCLINATION (DIP), DIP LATITUDE (MAGBR) C AND MODIFIED DIP (MODIP), ALL IN DEGREES C if(along.lt.0.) along = along + 360. ! -180/180 to 0-360 - + IF(JMAG.GT.0) THEN MLAT=ALATI MLONG=ALONG @@ -942,44 +942,44 @@ c hour=hourut+longi/15. ! hour becomes LT if(hour.gt.24.) hour=hour-24. endif - + CALL CLCMLT(IYEAR,DAYNR,HOURUT,LATI,LONGI,XMLT) c -c SEASON assumes equal length seasons (92 days) with spring -c (SEASON=1) starting at day-of-year=45; for lati < 0 adjustment +c SEASON assumes equal length seasons (92 days) with spring +c (SEASON=1) starting at day-of-year=45; for lati < 0 adjustment c for southern hemisphere is made. Some models require the c seasonal month (ISEAMON) or the seasonal day-of year (SEADAY) c ZMONTH is decimal month (Jan 1 = 1.0 and Dec 31 = 12.97) c SDAY is the day number reduced to a 360 day year (TOPH05) -c NRDAYM is the number of days in the current month +c NRDAYM is the number of days in the current month c IDAYY is the number of days in the current year -c - +c + SEASON=INT((DAYNR+45.0)/92.0) IF(SEASON.LT.1) SEASON=4 NSEASN=SEASON ! Northern hemisphere season zmonth = month + (iday-1)*1./nrdaym C NEW-GUL------------------------------ - sday=daynr/idayy*360. + sday=daynr/idayy*360. C NEW-GUL------------------------------ seaday=daynr iseamon=month IF(LATI.GE.0.0) GOTO 5592 - SEASON=SEASON-2 + SEASON=SEASON-2 IF(SEASON.LT.1) SEASON=SEASON+4 iseamon=month+6 if(iseamon.gt.12) iseamon=iseamon-12 seaday=daynr+idayy/2. if(seaday.gt.idayy) seaday=seaday-idayy C NEW-GUL------------------------------ - sday=sday+180. - if (sday.gt.360.) sday=sday-360. + sday=sday+180. + if (sday.gt.360.) sday=sday-360. C NEW-GUL------------------------------ C -C 12-month running mean sunspot number (rssn) and Ionospheric Global -C index (gind), daily F10.7 cm solar radio flux (f107d) and monthly -C F10.7 (cov) index +C 12-month running mean sunspot number (rssn) and Ionospheric Global +C index (gind), daily F10.7 cm solar radio flux (f107d) and monthly +C F10.7 (cov) index C 5592 continue @@ -988,12 +988,12 @@ C sam_doy=(daynr.eq.idaynro) sam_date=(sam_yea.and.sam_doy) sam_ut=(hourut.eq.ut0) - + if(sam_date.and..not.rzin.and..not.rzino & .and..not.igin.and..not.igino & .and..not.f107in.and..not.f107ino & .and..not.f107_81in.and..not.f107_81ino) goto 2910 - + call tcon(iyear,month,iday,daynr,rzar,arig,ttt,nmonth) if(nmonth.lt.0) goto 3330 ! jump to end of program @@ -1010,7 +1010,7 @@ c if(zi.gt.174.0) zi=174.0 arig(3) = zi endif endif - + if(IGIN) then zi = aigin arig(1) = zi @@ -1032,11 +1032,11 @@ c if(zi.gt.174.0) zi=174.0 c rlimit=gind c COVSAT=63.75+rlimit*(0.728+rlimit*0.00089) -C Getting F10.7 index: daily (f107d), previous day (f107y; +C Getting F10.7 index: daily (f107d), previous day (f107y; C required by MSIS), 81-day average (f10781), 365-day average -C (f107365), and PF10.7=(F10.7_daily + F10.7_81_day)/2. -C F10.7 should be adjusted (to top of atmosphere) value not -C observed (at the ground) value. +C (f107365), and PF10.7=(F10.7_daily + F10.7_81_day)/2. +C F10.7 should be adjusted (to top of atmosphere) value not +C observed (at the ground) value. f107d=cov f107y=cov f10781=cov @@ -1052,42 +1052,42 @@ C observed (at the ground) value. endif endif if(f107in) then - f107d=f107din ! user input: F10.7 daily + f107d=f107din ! user input: F10.7 daily f107y=f107din ! same input: F10.7 previous day if(.not.f107_81in) then f10781=f107din ! same input: F10.7 81-day f107365=f107din ! same input: F10.7 yearly average - endif + endif endif if(f107_81in) then f10781=f10781in ! user input: F10.7 81-day average f107365=f10781in ! same input: F10.7 yearly average if(.not.f107in) then - f107d=f10781in ! same input: F10.7 daily + f107d=f10781in ! same input: F10.7 daily f107y=f10781in ! same input: F10.7 previous day - endif - endif + endif + endif pf107=(f107d+f10781)/2. c Correcting F10.7 adjusted flux from APF107.DAT to flux observed at c Earth that is expected by NRLMSIS00 (GTD7) and CHEMION AND TBT-2015 -C (ION COMPOSITION) AND TBT-2012 (ELECTRON TEMPERATURE) +C (ION COMPOSITION) AND TBT-2012 (ELECTRON TEMPERATURE) - f_adj=radj*radj + f_adj=radj*radj f107yobs=f107y/f_adj f10781obs=f10781/f_adj pf107obs=pf107/f_adj - - if(jf(41)) cov=f107365 + + if(jf(41)) cov=f107365 COVSAT=cov if(covsat.gt.188.) covsat=188 C -C CALCULATION OF SOLAR ZENITH ANGLE (XHI/DEG), SUN DECLINATION ANGLE -C (SUNDEC),SOLAR ZENITH ANGLE AT NOON (XHINON) AND TIME OF LOCAL +C CALCULATION OF SOLAR ZENITH ANGLE (XHI/DEG), SUN DECLINATION ANGLE +C (SUNDEC),SOLAR ZENITH ANGLE AT NOON (XHINON) AND TIME OF LOCAL C SUNRISE/SUNSET (SAX, SUX; dec. hours) AT 80 KM (D-REGION), 110 KM -C (E-REGION), 200 KM (F1-REGION), AND 300 KM (F-REGION AND TOPSIDE). +C (E-REGION), 200 KM (F1-REGION), AND 300 KM (F-REGION AND TOPSIDE). C 2910 continue @@ -1131,7 +1131,7 @@ C C CALCULATION OF ELECTRON DENSITY PARAMETERS................ C lower height boundary (HNEA), upper boundary (HNEE) C - + 1334 continue IF(JF(45).and.DNIGHT) HNEA=80. IF(NODEN) GOTO 4933 @@ -1157,7 +1157,7 @@ c c c F2 peak critical frequency foF2, density NmF2, and height hmF2 c -C READ CCIR AND URSI COEFFICIENT SET FOR CHOSEN MONTH +C READ CCIR AND URSI COEFFICIENT SET FOR CHOSEN MONTH C IF((FOF2IN).AND.(HMF2IN).and.(itopn.ne.2)) GOTO 501 IF((FOF2INO).OR.(HMF2INO)) GOTO 7797 @@ -1192,8 +1192,8 @@ c1144 FORMAT('/var/www/omniweb/cgi/vitmo/IRI/ursi',I2,'.asc') endif C -C READ CCIR AND URSI COEFFICIENT SET FOR NMONTH, i.e. previous -c month if day is less than 15 and following month otherwise +C READ CCIR AND URSI COEFFICIENT SET FOR NMONTH, i.e. previous +c month if day is less than 15 and following month otherwise C 4293 continue @@ -1220,7 +1220,7 @@ C endif GOTO 4291 - + 8448 WRITE(konsol,8449) FILNAM 8449 FORMAT(1X////, & ' The file ',A30,'is not in your directory.') @@ -1264,7 +1264,7 @@ C xm3000= zm3000+ ttt * (xm300n-zm3000) endif XM3_CCIR=XM3000 - + 501 IF(FOF2IN) THEN FOF2=AFOF2 NMF2=ANMF2 @@ -1285,21 +1285,21 @@ c fstorm_on=jf(26).and.jf(8) estorm_on=jf(35).and.jf(15) c if(fstorm_on.or.jf(33).or.estorm_on) then -c if(.not.sam_date.or..not.sam_ut) then +c if(.not.sam_date.or..not.sam_ut) then call apf(isdate,hourut,indap) c endif c endif index_3h_ap=indap(13) if(index_3h_ap.gt.-1) then xkp=ckp(index_3h_ap) - else + else xkp=3.0 - endif - + endif + c -c stormtime updating for foF2 (foF2s, NmF2s) +c stormtime updating for foF2 (foF2s, NmF2s) c - if(fstorm_on.and.(indap(1).gt.-1)) then + if(fstorm_on.and.(indap(1).gt.-1)) then icoord=1 kut=int(hourut) call STORM(indap,lati,longi,icoord,cglat,kut, @@ -1310,7 +1310,7 @@ c c c stormtime updating for foE (foEs, NmEs) c - if(estorm_on.and.(index_3h_ap.gt.-1)) then + if(estorm_on.and.(index_3h_ap.gt.-1)) then estormcor=STORME_AP(DAYNR,MLAT,index_3h_ap*1.0) if(estormcor.gt.-2.0) foes=foe*estormcor NMES=1.24E10*FOES*FOES @@ -1319,7 +1319,7 @@ c c calculation of equatorward auroral boundary c if(jf(33)) then -c Corrected magnetic latitude CGM of equatorward boundary, +c Corrected magnetic latitude CGM of equatorward boundary, c ab_mlat(48), for MLT=0.0,0.5,1.0 ... 23.5 h and kp=xkp call auroral_boundary(xkp,-1.0,cgmlat,ab_mlat) DAT(1,1)=lati @@ -1334,7 +1334,7 @@ c cgm_mlt00_ut=DAT(11,1) cgm_mlt=hourut-cgm_mlt00_ut if(cgm_mlt.lt.0.) cgm_mlt=24.+hourut-cgm_mlt00_ut c cgm_mlt_ut=DAT(11,1) -c cgm_mlt=cgm_mlt_ut+cgm_lon/15. +c cgm_mlt=cgm_mlt_ut+cgm_lon/15. c if(cgm_mlt.gt.24.) cgm_mlt=cgm_mlt-24. c CGM latitude of boundary (cgmlat) for present MLT value @@ -1342,7 +1342,7 @@ C 2012.02 12/17/12 Add magnetic declination as oarr(84) output zmlt=xmlt C zmlt=cgm_mlt cgmlat=100.0 - if(zmlt.ge.0.0.and.zmlt.le.24.0) + if(zmlt.ge.0.0.and.zmlt.le.24.0) & call auroral_boundary(xkp,zmlt,cgmlat,ab_mlat) endif IF(((.not.JF(4)).and.JF(31)).or.((.not.JF(39)).and.JF(40))) THEN @@ -1360,28 +1360,28 @@ C zmlt=cgm_mlt endif RLAT=XRLAT ENDIF - -c Computation of hmF2: user input or 3 model options + +c Computation of hmF2: user input or 3 model options IF(HMF2IN) THEN IF(AHMF2.LT.50.0) THEN XM3000=AHMF2 ratf=fof2/foe -c if jf(36)=false then foF2_storm in hmF2 formula +c if jf(36)=false then foF2_storm in hmF2 formula if(.not.jf(36)) ratf=fof2s/foe HMF2=HMF2ED(MAGBR,RSSN,RATF,XM3000) - ELSE + ELSE HMF2=AHMF2 c No longer used because NeQuick only with CCIR-M(3000)F2 c XM3000=XM3000HM(MAGBR,RSSN,FOF2/FOE,HMF2) ENDIF ELSE IF(JF(39)) THEN ratf=fof2/foe -c if jf(36)=false then foF2_storm in hmF2 formula +c if jf(36)=false then foF2_storm in hmF2 formula if(.not.jf(36)) ratf=fof2s/foe HMF2=HMF2ED(MAGBR,RSSN,RATF,XM3000) ELSE IF(JF(40)) THEN -c AMTB digisonde model +c AMTB digisonde model CALL SHAMDHMF2(RLAT,FLON,ZMONTH,RSSN,HMF2) ELSE c SHUBIN-COSMIC model @@ -1418,10 +1418,10 @@ c EX1=EX+1 EPIN=4.*EX/(EX1*EX1) ETA1=-0.02*EPIN - ETA = 0.058798 + ETA1 - - & FLU * (0.014065 - 0.0069724 * COS2) + + ETA = 0.058798 + ETA1 - + & FLU * (0.014065 - 0.0069724 * COS2) + & FO1* (0.0024287 + 0.0042810 * COS2 - 0.0001528 * FO1) - ZETA = 0.078922 - 0.0046702 * COS2 - + ZETA = 0.078922 - 0.0046702 * COS2 - & FLU * (0.019132 - 0.0076545 * COS2) + & FO1* (0.0032513 + 0.0060290 * COS2 - 0.00020872 * FO1) BETA=-128.03 + 20.253 * COS2 - @@ -1441,10 +1441,10 @@ c zmp111 = zmp1 / (zmp11 * zmp11) zmp2 = exp(modip / 19.) zmp22 = 1. + zmp2 - zmp222 = zmp2 / (zmp22 * zmp22) - r2n = -0.84 - 1.6 * zmp111 - r2d = -0.84 - 0.64 * zmp111 - x1n = 230. - 700. * zmp222 + zmp222 = zmp2 / (zmp22 * zmp22) + r2n = -0.84 - 1.6 * zmp111 + r2d = -0.84 - 0.64 * zmp111 + x1n = 230. - 700. * zmp222 x1d = 550. - 1900. * zmp222 r2 = HPOL(HOUR,r2d,r2n,SAX300,SUX300,1.,1.) x1 = HPOL(HOUR,x1d,x1n,SAX300,SUX300,1.,1.) @@ -1465,7 +1465,7 @@ c endif c NEW-GUL-------------------------------- c -c NeQuick topside parameters +c NeQuick topside parameters C Use CCIR-M3000F2 even if user_hmF2 or user_M(3000)F2 c if (itopn.eq.2) then @@ -1482,7 +1482,7 @@ c endif c c Bottomside thickness parameter B0 and shape parameters B1 -c +c if(jf(4)) then B0=B0_98(HOUR,SAX200,SUX200,NSEASN,RSSN,LONGI,MODIP) B1=HPOL(HOUR,1.9,2.6,SAX200,SUX200,1.,1.) @@ -1501,18 +1501,18 @@ cnew! IF (FNIGHT) GRAT = 0.91D0 - HMF2/4000.D0 if(B1IN) B1=B1_US if(B1.gt.6) B1=6.0 if(B1.lt.0.6) B1=0.6 - + c c F1 layer height hmF1, critical frequency foF1, peak density NmF1 c No F1 layer if jf(19) and jf(20) are false c - if(.not.f1_ocpro.and.f1_l_cond) then + if(.not.f1_ocpro.and.f1_l_cond) then F1REG=.false. FOF1=-1.0 NMF1=-1.0 goto 2918 endif - + IF(FOF1IN) THEN FOF1=AFOF1 NMF1=ANMF1 @@ -1525,7 +1525,7 @@ c F1 layer thickness parameter c1 c c1 = f1_c1(modip,hour,sax2,sux2) c -c F1 occurrence probability with Scotto et al. 1997 or Ducharme et al. +c F1 occurrence probability with Scotto et al. 1997 or Ducharme et al. c if jf(19)=f1_ocpro=.true. or .false. c If .not.jf(20)=f1_l_cond=.true. then Scotto model with L-condition c @@ -1533,18 +1533,18 @@ c call f1_prob(xhi3,mlat,rssn,f1pbw,f1pbl) f1pb = f1pbw if(f1_l_cond) f1pb = f1pbl - else - f1pb = 0.0 - if((.not.fnight).and.(fof1.gt.0.0)) f1pb=1. + else + f1pb = 0.0 + if((.not.fnight).and.(fof1.gt.0.0)) f1pb=1. endif f1reg=.false. if((fof1in).or.(f1pb.ge.0.5)) f1reg=.true. -2918 continue +2918 continue c -c E-valley: DEPTH=(NmE-N_deepest)/NmE*100, WIDTH=HEF-HmE, -c distance of deepest value point above E-peak(HDEEP), -c derivative at valley top divided by NmE (DLNDH), +c E-valley: DEPTH=(NmE-N_deepest)/NmE*100, WIDTH=HEF-HmE, +c distance of deepest value point above E-peak(HDEEP), +c derivative at valley top divided by NmE (DLNDH), c and height of valley top (HEF) c XDEL=XDELS(SEASON)/DELA @@ -1590,8 +1590,8 @@ c X=HME-HDX XKK=-DXDX*X/(XDX*ALOG(XDX/NMES)) c -c if exponent xkk is larger than xkkmax, then xkk will be set to -c xkkmax and d1 will be determined such that the point hdx/xdx is +c if exponent xkk is larger than xkkmax, then xkk will be set to +c xkkmax and d1 will be determined such that the point hdx/xdx is c reached; derivative is no longer continuous. c xkkmax=5. @@ -1633,7 +1633,7 @@ c do ii=1,11 ddens(4,ii)=-1. if(ii.lt.8) ddens(4,ii)=10**(elg(ii)+6) - enddo + enddo f5sw=0. f6wa=1. call DRegion(xhi1,month,f107d,vKp,f5SW,f6WA,elg) @@ -1664,7 +1664,7 @@ c omit F1 feature if nmf1*0.9 is smaller than nme goto 9427 endif goto 9245 - endif + endif CALL REGFA1(HEF,HMF2,XE2H,NMF2S,0.001,NMF1,XE2,SCHALT,HMF1) IF(.not.SCHALT) GOTO 3801 @@ -1672,7 +1672,7 @@ c c omit F1 feature .................................................... c -9427 if(mess) WRITE(KONSOL,11) +9427 if(mess) WRITE(KONSOL,11) 11 FORMAT(1X,'*NE* HMF1 IS NOT EVALUATED BY THE FUNCTION XE2'/ & 1X,'CORR.: NO F1 REGION, B1=3, C1=0.0') HMF1=0. @@ -1713,7 +1713,7 @@ C hf2=hef xf2=xe3_1(hf2) if(xf2.gt.nmes) goto 3885 - + CALL REGFA1(hf1,HF2,XF1,XF2,0.001,NMES,XE3_1,SCHALT,HST) if(schalt) goto 3885 @@ -1771,7 +1771,7 @@ C IAPO(1)=0. else SWMI(9)=-1.0 - endif + endif CALL TSELEC(SWMI) CALL GTD7(IYD,SEC,HEQUI,LATI,LONGI,HOUR,F10781OBS, & F107YOBS,IAPO,0,D_MSIS,T_MSIS) @@ -1788,7 +1788,7 @@ c Te(120km) = Tn(120km) AHH(1)=120. ATE(1)=TN120 -C Te-MAXIMUM based on JICAMARCA and ARECIBO data +C Te-MAXIMUM based on JICAMARCA and ARECIBO data HMAXD=60.*EXP(-(MLAT/22.41)**2)+210. HMAXN=150. @@ -1800,13 +1800,13 @@ C Te-MAXIMUM based on JICAMARCA and ARECIBO data TMAXN=T_MSIS(2) ATE(2)=HPOL(HOUR,TMAXD,TMAXN,SAX200,SUX200,1.,1.) -c Te(300km), Te(400km) from AE-C, Te(1400km), Te(3000km) from +c Te(300km), Te(400km) from AE-C, Te(1400km), Te(3000km) from c ISIS, Brace and Theis DIPLAT=MAGBR CALL TEBA(DIPLAT,HOUR,NSEASN,TEA) - icd=0 + icd=0 if(jf(23)) then c Te at fixed heights taken from Brace and Theis @@ -1845,7 +1845,7 @@ c isa for solar activity correction: isa=0 sol activity corr off do ijk=3,7 c call igrf_sub(lati,longi,ryear,ahh(ijk), c & xl,icode,dipl,babs) -c if(xl.gt.10.) xl=10. +c if(xl.gt.10.) xl=10. c call elteik(1,isa,invdip,xl6,dimo,babs6,dipl6, c & xmlt,ahh(ijk),daynr,pf107,teh2,sdte) call elteik(isa,invdip_old,xmlt,ahh(ijk),daynr, @@ -1906,7 +1906,7 @@ c Ti(430km) duirng nighttime from AEROS data c Ti(430km) for specified time using HPOL - TI1=TIN1 + TI1=TIN1 IF(TID1.GT.TIN1) TI1=HPOL(HOUR,TID1,TIN1,SAX300,SUX300,1.,1.) c Tn < Ti < Te enforced @@ -1942,7 +1942,7 @@ c XTETI is altitude where Te=Ti IF(XTTS.GT.0.1) GOTO 2390 XTETI=X+XTTS*5. -c Ti=Te above XTETI +c Ti=Te above XTETI MXSM=3 MM(3)=STTE(6) @@ -1970,7 +1970,7 @@ C HNIA=75. if(RBTT) HNIA=80. HNIE=2000. - + C C CALCULATION FOR THE REQUIRED HEIGHT RANGE....................... C In the absence of an F1 layer hmf1=hz since hmf1 is used in XE @@ -2000,7 +2000,7 @@ c tcor1=0.0 IF(height.lt.hcor1) goto 2319 - IF(itopn.eq.1.or.itopn.eq.3) then + IF(itopn.eq.1.or.itopn.eq.3) then xred = height - hcor1 rco = tc3 * xred TCOR1 = rco * alg10 @@ -2011,14 +2011,14 @@ c call tops_cor2(height,modip,a01) tcor2=a01(1,1)+a01(2,1)*pf107 if (fnight) tcor2=a01(1,2)+a01(2,2)*pf107 - endif - - tcor=tcor1+tcor2 - + endif + + tcor=tcor1+tcor2 + ELEDE=XE_1(HEIGHT) - + c -c FIRI D region +c FIRI D region c if(.not.dreg.and.height.le.140.) then elede=-1. @@ -2043,7 +2043,7 @@ c if(TIH.lt.TNH) TIH=TNH endif TEH=TNH - if(HEIGHT.GT.HEQUI) then + if(HEIGHT.GT.HEQUI) then TEH=ELTE(HEIGHT) if(TEH.lt.TIH) TEH=TIH endif @@ -2087,7 +2087,7 @@ c Richards-Bilitza-Voglozin-2010 IDC model CALL CHEMION(jprint,height,F107YOBS,F10781OBS,TEH,TIH, & TNH,D_MSIS(2),D_MSIS(4),D_MSIS(3),D_MSIS(1), & D_MSIS(7),-1.0,XN4S,EDENS,-1.0,xhi,ro,ro2,rno,rn2, - & rn,Den_NO,Den_N2D,INEWT) + & rn,Den_NO,Den_N2D,INEWT) if(INEWT.gt.0) then sumion = edens/100. rox=ro/sumion @@ -2115,7 +2115,7 @@ c c ion densities are given in percent of total electron density; c - if(jf(22)) then + if(jf(22)) then xnorm=1 else xnorm=elede/100. @@ -2133,32 +2133,32 @@ c if(kk.le.numhei) goto 300 C -C END OF PARAMETER COMPUTATION LOOP +C END OF PARAMETER COMPUTATION LOOP C c c D region special: densities for 11 heights (60,65,70,..,110km) -c outf(14,1:11)=IRI-07, outf(14,12:22)=FIRI, -c outf(14,23:33)= Danilov et al.(1995) with SW=0,WA=0 -c outf(14,34:44)= with SW=0.5,WA=0, -c outf(14,45:55)= with SW=1,WA=0, -c outf(14,56:66)= with SW=0,WA=0.5, -c outf(14,67:77)= with SW=0,WA=1, +c outf(14,1:11)=IRI-07, outf(14,12:22)=FIRI, +c outf(14,23:33)= Danilov et al.(1995) with SW=0,WA=0 +c outf(14,34:44)= with SW=0.5,WA=0, +c outf(14,45:55)= with SW=1,WA=0, +c outf(14,56:66)= with SW=0,WA=0.5, +c outf(14,67:77)= with SW=0,WA=1, c if(.not.dreg) then do ii=1,11 - Htemp=55+ii*5 - outf(14,ii)=-1. - if(Htemp.ge.65.) outf(14,ii)=XE6(Htemp) + Htemp=55+ii*5 + outf(14,ii)=-1. + if(Htemp.ge.65.) outf(14,ii)=XE6(Htemp) outf(14,11+ii)=-1. call F00(Htemp,LATI,DAYNR,XHI1,F107D,EDENS,IERROR) if(ierror.eq.0.or.ierror.eq.2) outf(14,11+ii)=edens - outf(14,22+ii)=ddens(1,ii) - outf(14,33+ii)=ddens(2,ii) - outf(14,44+ii)=ddens(3,ii) - outf(14,55+ii)=ddens(4,ii) - outf(14,66+ii)=ddens(5,ii) + outf(14,22+ii)=ddens(1,ii) + outf(14,33+ii)=ddens(2,ii) + outf(14,44+ii)=ddens(3,ii) + outf(14,55+ii)=ddens(4,ii) + outf(14,66+ii)=ddens(5,ii) enddo endif @@ -2193,7 +2193,7 @@ c C C ADDITIONAL PARAMETER FIELD OARR: angles are given in degrees, C times in decimal hours, altitudes in km, densities in m-3, and -C temperatures in K +C temperatures in K C IF(NODEN) GOTO 6192 @@ -2203,11 +2203,11 @@ C if(f1reg) OARR(4)=XHMF1 OARR(5)=NMES ! E-peak density in m-3 OARR(6)=HME ! E-peak height in km - OARR(7)=NMD ! density in m-3 of D-region inflection point + OARR(7)=NMD ! density in m-3 of D-region inflection point OARR(8)=HMD ! height in km of D-region inflection point OARR(9)=HHALF ! height used by Gulyaeva B0 model OARR(10)=B0 ! bottomside thickness parameter in km - OARR(11)=VNER ! density in m-3 at E-valley bottom + OARR(11)=VNER ! density in m-3 at E-valley bottom OARR(12)=HEF ! height in km of E-valley top (Ne(HEF)=NmE) 6192 IF(NOTEM) GOTO 6092 OARR(13)=ATE(2) ! electron temperature Te in K at AHH(2) @@ -2221,17 +2221,17 @@ C OARR(21)=TI1 ! ion temperature in K at 430km OARR(22)=XTETI ! altitude where Te=Ti 6092 OARR(23)=XHI3 ! solar zenith angle at 200 km - OARR(24)=SUNDEC ! sun declination + OARR(24)=SUNDEC ! sun declination OARR(25)=DIP ! IGRF magnetic inclination (dip) OARR(26)=MAGBR ! IGRF dip latitude OARR(27)=MODIP ! modified dip latitude - OARR(28)=LATI ! geographic latitude + OARR(28)=LATI ! geographic latitude OARR(29)=SAX200 ! time of sunrise at 200 km OARR(30)=SUX200 ! time of sunset at 200 km - OARR(31)=SEASON ! =1 spring, 2= summer .. -c SEASON assumes equal length seasons (92 days) with spring + OARR(31)=SEASON ! =1 spring, 2= summer .. +c SEASON assumes equal length seasons (92 days) with spring c (SEASON=1) starting at day-of-year=45 - OARR(32)=LONGI ! geographic longitude + OARR(32)=LONGI ! geographic longitude OARR(33)=rssn ! 12-month running mean of sunspot number OARR(34)=COV ! 12-month running mean of F10.7 OARR(35)=B1 ! Bottomside shape parameter @@ -2256,7 +2256,7 @@ C OARR(37) used for TEC and 38 for TEC-top C Please check subroutine GEOCGM01 in file IGRF.FOR for more C information on the Corrected Geomagnetic (CGM) coordinates. C CGM coordinates are only calculated if you select -C AURORAL BOUNDARIES +C AURORAL BOUNDARIES OARR(55)=cgm_lat ! Corrected Geomagnetic (CGM) latitude OARR(56)=cgm_lon ! Corrected Geomagnetic (CGM) longitude OARR(57)=cgm_mlt ! Magnetic Local Time for CGM coord. @@ -2264,7 +2264,7 @@ C AURORAL BOUNDARIES c include only every second auroral boundary point (MLT=0,1,2..23) jjj=58 do iii=1,47,2 ! CGM latitude at MLT=0,1,2 ...23 - jjj=jjj+1 + jjj=jjj+1 oarr(jjj)=ab_mlat(iii) enddo OARR(83)=xkp ! Kp at the time specified by the user @@ -2272,15 +2272,15 @@ c include only every second auroral boundary point (MLT=0,1,2..23) OARR(85)=fl ! L-value OARR(86)=dimo ! Earth's dipole moment OARR(87)=SAX300 ! sunrise at 300km in decimal hours - OARR(88)=SUX300 ! sunset at 300km in decimal hours - OARR(89)=HNEA ! lower boundary in km of IRI profile - OARR(90)=HNEE ! upper boundary in km of IRI profile + OARR(88)=SUX300 ! sunset at 300km in decimal hours + OARR(89)=HNEA ! lower boundary in km of IRI profile + OARR(90)=HNEE ! upper boundary in km of IRI profile 3330 CONTINUE c output of solar indices used c write(6,10201) iyyyy,rssn,gind,cov,covsat,f107d,f10781, -c & f107365,pf107,cov-f10781,cov-f107365,cov-pf107 +c & f107365,pf107,cov-f10781,cov-f107365,cov-pf107 c10201 format(I5,11F6.1) icalls=icalls+1 @@ -2291,12 +2291,12 @@ c c subroutine iri_web(jmag,jf,alati,along,iyyyy,mmdd,iut,dhour, & height,h_tec_max,ivar,vbeg,vend,vstp,a,b) -c----------------------------------------------------------------------- +c----------------------------------------------------------------------- c changes: c 11/16/99 jf(30) instead of jf(17) c 10/31/08 outf, a, b (100 -> 500) c -c----------------------------------------------------------------------- +c----------------------------------------------------------------------- c input: jmag,alati,along,iyyyy,mmdd,dhour see IRI_SUB c height height in km c h_tec_max =0 no TEC otherwise upper boundary for integral @@ -2311,7 +2311,7 @@ c output: a similar to outf in IRI_SUB c b similar to oarr in IRI_SUB c c numstp number of steps; maximal 1000 -c----------------------------------------------------------------------- +c----------------------------------------------------------------------- dimension outf(20,1000),oar(100),oarr(100),a(20,1000) dimension xvar(8),b(100,1000) logical jf(50) @@ -2321,15 +2321,15 @@ c----------------------------------------------------------------------- if(numstp.gt.nummax) numstp=nummax do 6249 i=1,100 -6249 oar(i)=b(i,1) +6249 oar(i)=b(i,1) if(ivar.eq.1) then do 1249 i=1,100 -1249 oarr(i)=oar(i) +1249 oarr(i)=oar(i) xhour=dhour+iut*25. call IRI_SUB(JF,JMAG,ALATI,ALONG,IYYYY,MMDD,XHOUR, & VBEG,VEND,VSTP,a,OARR) - if(h_tec_max.gt.50.) then + if(h_tec_max.gt.50.) then call iri_tec (50.,h_tec_max,2,tec,tect,tecb) oarr(37)=tec oarr(38)=tect @@ -2361,7 +2361,7 @@ c----------------------------------------------------------------------- do 1 i=1,numstp do 1349 iii=1,100 -1349 oarr(iii)=b(iii,i) +1349 oarr(iii)=b(iii,i) call IRI_SUB(JF,JMAG,ALATI,ALONG,IYYYY,MMDD,DHOUR, & height,height,1.,OUTF,OARR) if(h_tec_max.gt.50.) then @@ -2388,4 +2388,3 @@ c----------------------------------------------------------------------- return end - diff --git a/RMextract/pyiri/iritec.for b/RMextract/pyiri/iritec.for index 5ad408f..3b1b2b0 100644 --- a/RMextract/pyiri/iritec.for +++ b/RMextract/pyiri/iritec.for @@ -1,16 +1,16 @@ c iritec.for, version number can be found at the end of this comment. -c----------------------------------------------------------------------- +c----------------------------------------------------------------------- C -C contains IRIT13, IONCORR, IRI_TEC subroutines to computed the +C contains IRIT13, IONCORR, IRI_TEC subroutines to computed the C total ionospheric electron content (TEC) C -c----------------------------------------------------------------------- +c----------------------------------------------------------------------- C Corrections C C 3/25/96 jmag in IRIT13 as input C 8/31/97 hu=hr(i+1) i=6 out of bounds condition corrected C 9/16/98 JF(17) added to input parameters; OUTF(11,50->100) -C ?/ ?/99 Ne(h) restricted to values smaller than NmF2 for topside +C ?/ ?/99 Ne(h) restricted to values smaller than NmF2 for topside C 11/15/99 JF(20) instead of JF(17) C 10/16/00 if hr(i) gt hend then hr(i)=hend C 12/14/00 jf(30),outf(20,100),oarr(50) @@ -25,30 +25,30 @@ c C 2012.00 10/05/11 IRI-2012: bottomside B0 B1 model (SHAMDB0D, SHAB1D), C 2012.00 10/05/11 bottomside Ni model (iriflip.for), auroral foE C 2012.00 10/05/11 storm model (storme_ap), Te with PF10.7 (elteik), -C 2012.00 10/05/11 oval kp model (auroral_boundary), IGRF-11(igrf.for), +C 2012.00 10/05/11 oval kp model (auroral_boundary), IGRF-11(igrf.for), C 2012.00 10/05/11 NRLMSIS00 (cira.for), CGM coordinates, F10.7 daily C 2012.00 10/05/11 81-day 365-day indices (apf107.dat), ap->kp (ckp), C 2012.00 10/05/11 array size change jf(50) outf(20,1000), oarr(100). -c----------------------------------------------------------------------- +c----------------------------------------------------------------------- C C subroutine IRIT13(ALATI,ALONG,jmag,jf,iy,md,hour,hbeg,hend, & tec,tecb,tect) -c----------------------------------------------------------------------- +c----------------------------------------------------------------------- c Program for numerical integration of IRI-94 profiles from h=100km -C to h=alth. -C +C to h=alth. +C C INPUT: ALATI,ALONG LATITUDE NORTH AND LONGITUDE EAST IN DEGREES C jmag =0 geographic =1 geomagnetic coordinates C jf(1:50) =.true./.false. flags; explained in IRISUB.FOR C iy,md date as yyyy and mmdd (or -ddd) C hour decimal hours LT (or UT+25) c hbeg,hend upper and lower integration limits in km -C +C C OUTPUT: TEC Total Electron Content in m-2 C tecb,tect percentage of bottomside and topside content -c----------------------------------------------------------------------- +c----------------------------------------------------------------------- dimension outf(20,1000),oarr(100) logical jf(50) @@ -83,19 +83,19 @@ c c c real function ioncorr(tec,f) -c----------------------------------------------------------------------- +c----------------------------------------------------------------------- c computes ionospheric correction IONCORR (in m) for given vertical c ionospheric electron content TEC (in m-2) and frequency f (in Hz) -c----------------------------------------------------------------------- +c----------------------------------------------------------------------- ioncorr = 40.3 * tec / (f*f) return end c c subroutine iri_tec (hstart,hend,istep,tectot,tectop,tecbot) -c----------------------------------------------------------------------- +c----------------------------------------------------------------------- C subroutine to compute the total ionospheric content -C INPUT: +C INPUT: C hstart altitude (in km) where integration should start C hend altitude (in km) where integration should end C istep =0 [fast, but higher uncertainty <5%] @@ -106,15 +106,15 @@ C tectot total ionospheric content in tec-units (10^16 m^-2) C tectop topside content (in %) C tecbot bottomside content (in %) C -C The different stepsizes for the numerical integration are -c defined as follows (h1=100km, h2=hmF2-10km, h3=hmF2+10km, +C The different stepsizes for the numerical integration are +c defined as follows (h1=100km, h2=hmF2-10km, h3=hmF2+10km, c h4=hmF2+150km, h5=hmF2+250km): C istep h1-h2 h2-h3 h3-h4 h4-h5 h5-hend C 0 2.0km 1.0km 2.5km exponential approximation C 1 2.0km 1.0km 2.5km 10.0km 30.0km -C 2 1.0km 0.5km 1.0km 1.0km 1.0km +C 2 1.0km 0.5km 1.0km 1.0km 1.0km C -c----------------------------------------------------------------------- +c----------------------------------------------------------------------- logical expo dimension step(5),hr(6) @@ -124,7 +124,7 @@ c----------------------------------------------------------------------- C NEW-GUL------------------------------ c & /QTOP/Y05,H05TOP,QF,XNETOP,XM3000,hht,TAU -ctest +ctest save expo = .false. @@ -145,10 +145,10 @@ C NEW-2003: Half-density: XNETOP at htop in [hmf2,1000 km) hr(4) = hmf2+150. hr(5) = hmf2+250. hr(6) = hend - do 2918 i=2,6 + do 2918 i=2,6 2918 if (hr(i).gt.hend) hr(i)=hend - if (istep.eq.0) then + if (istep.eq.0) then step(1)=2.0 step(2)=1.0 step(3)=2.5 @@ -242,7 +242,7 @@ C NEW-GUL------------------------------ zzz = sumtop + sumbot tectop = sumtop / zzz * 100. tecbot = sumbot / zzz * 100. - tectot = zzz * xnmf2 + tectot = zzz * xnmf2 return 5 num_step = 3 @@ -253,7 +253,7 @@ C NEW-GUL------------------------------ xntop = xe_1(hei_end)/xnmf2 if(xntop.gt.0.9999) then - ss_t = top_end + ss_t = top_end goto 2345 endif @@ -266,7 +266,7 @@ C NEW-GUL------------------------------ C hss = 360. xkk = exp ( - top_end / hss ) - 1. x_2 = hei_2 - x_3 =hei_top-hss*alog(xkk*(hei_3 - hei_top)/top_end + 1.) + x_3 =hei_top-hss*alog(xkk*(hei_3 - hei_top)/top_end + 1.) x_4 =hei_top-hss*alog(xkk*(hei_4 - hei_top)/top_end + 1.) x_5 = hei_end @@ -293,10 +293,10 @@ C hss = 360. ss_4=( ed_5 - ed_4 ) * ( x_5 - x_4 ) / alog ( ed_5 / ed_4 ) endif - ss_t = ss_2 + ss_3 + ss_4 + ss_t = ss_2 + ss_3 + ss_4 2345 sumtop = sumtop + ss_t * 1000. - + zzz = sumtop + sumbot tectop = sumtop / zzz * 100. tecbot = sumbot / zzz * 100. @@ -304,4 +304,3 @@ C hss = 360. RETURN END - diff --git a/RMextract/pyiri/iritest.for b/RMextract/pyiri/iritest.for index bfc8001..ac6f72e 100644 --- a/RMextract/pyiri/iritest.for +++ b/RMextract/pyiri/iritest.for @@ -14,12 +14,12 @@ c 2005.01 05/06/06 included spread-F (jf(28)) and topside (jf(29)) options C 2007.00 05/18/07 Release of IRI-2007 c 2007.02 10/31/08 outf(100) -> outf(500), numhei=numstp=500 c 2007.03 02/12/09 added new D-region option (h=-3) -c 2007.11 04/19/10 correct TEC for normal output [Shunrong Zhang] +c 2007.11 04/19/10 correct TEC for normal output [Shunrong Zhang] c C 2012.00 10/05/11 IRI-2012: bottomside B0 B1 model (SHAMDB0D, SHAB1D), C 2012.00 10/05/11 bottomside Ni model (iriflip.for), auroral foE C 2012.00 10/05/11 storm model (storme_ap), Te with PF10.7 (elteik), -C 2012.00 10/05/11 oval kp model (auroral_boundary), IGRF-11(igrf.for), +C 2012.00 10/05/11 oval kp model (auroral_boundary), IGRF-11(igrf.for), C 2012.00 10/05/11 NRLMSIS00 (cira.for), CGM coordinates, F10.7 daily C 2012.00 10/05/11 81-day 365-day indices (apf107.dat), ap->kp (ckp), C 2012.00 10/05/11 array size change jf(50) outf(20,1000), oarr(100). @@ -30,7 +30,7 @@ C 2012.03 09/18/14 rzino, igino logical not real; and more (A. Mazzella) C 2012.03 09/18/14 jf defaults and special for piktab=3 (A. Mazzella) C 2012.03 09/23/14 jf(22): output option Ni in [m-3]/1.e9 C 2012.03 09/23/14 jf(36:38) include in input choices -C 2012.03 09/23/14 added output options for parameters oar(59:86) +C 2012.03 09/23/14 added output options for parameters oar(59:86) C 2012.05 04/27/15 delete double line CHARACTER*9 pname(6) C 2015.01 06/30/15 scid=1.0E-9 (A. Charisi) C 2015.01 06/30/15 jino-outf(9)&jio2-outf(8) write.jio2,jino(A. Charisi) @@ -96,9 +96,9 @@ c ut0=-1 call read_ig_rz call readapf107 - + nummax=1000 - + do 6249 i=1,100 6249 oar(i,1)=-1.0 @@ -133,13 +133,13 @@ c print *,'Options: t(rue) or f(alse)' print *,'Enter 0 to use standard or 1 to enter your own' read(5,*) jchoice - do i=1,50 + do i=1,50 jf(i)=.true. enddo if(piktab.eq.4) jf(24)=.false. if(jchoice.eq.0) then c defaults for jf(1:50) -c jf(1)=.false. ! f=no electron densities (t) +c jf(1)=.false. ! f=no electron densities (t) c jf(2)=.false. ! f=no temperatures (t) c jf(3)=.false. ! f=no ion composition (t) jf(4)=.false. ! t=B0table f=other models (f) @@ -164,8 +164,8 @@ c jf(36)=.false. ! t=hmF2 w/out foF2_storm f=with (t) c jf(37)=.false. ! t=topside w/out foF2_storm f=with (t) c jf(38)=.false. ! t=WRITEs off in IRIFLIP f=on (t) jf(39)=.false. ! t=M3000F2 model f=new hmF2 models (f) -c jf(40)=.false. ! t=AMTB-model, f=Shubin-COSMIC model (t) -c jf(41)=.false. ! t:COV=F10.7_386 f:COV=f(IG12) (t) +c jf(40)=.false. ! t=AMTB-model, f=Shubin-COSMIC model (t) +c jf(41)=.false. ! t:COV=F10.7_386 f:COV=f(IG12) (t) c jf(42)=.false. ! t/f=Te w/o PF10.7 dependance (t) c jf(43)=.false. ! t= B0 model f= B0 user input (t) c jf(44)=.false. ! t= B1 model f= B1 user input (t) @@ -197,13 +197,13 @@ c jf(46)=.false. ! t=HNEE=2000 f=user input oarr(90) print *,'foF2: t=with storm model, f=without {t}' read(5,*) jf(26) print *,'hmF2: t=f(M3000F2), f=new models {f}' - read(5,*) jf(39) + read(5,*) jf(39) print *,'hmF2: t=AMTB-model, f=Shubin-COSMIC model {t}' - read(5,*) jf(40) + read(5,*) jf(40) if(jf(39)) then print *,'hmF2: t=w/o foF2 storm model, f=with {t}' read(5,*) jf(36) - endif + endif print *,'F2 peak density or foF2: t=model, ', & 'f=user input {t}' read(5,*) jf(8) @@ -222,10 +222,10 @@ c jf(46)=.false. ! t=HNEE=2000 f=user input oarr(90) & 'f=other options {f}.' read(5,*) jf(4) print *,'Bottomside thickness B0: t=ABT-2009, ', - & 'f= Gul-1987 {t}.' + & 'f= Gul-1987 {t}.' read(5,*) jf(31) print *,'Bottomside thickness B0: t=model, ', - & 'f=user input {t}.' + & 'f=user input {t}.' read(5,*) jf(43) print *,'F1 peak density or foF1: t=model, ', & 'f=user input {t}' @@ -258,12 +258,12 @@ c jf(46)=.false. ! t=HNEE=2000 f=user input oarr(90) read(5,*) jf(42) endif if(jf(3)) then - print *,'Ion comp. model: t=DS95/DY85, f=RBV10/TBT15 {f}' + print *,'Ion comp. model: t=DS95/DY85, f=RBV10/TBT15 {f}' read(5,*) jf(6) if(.not.jf(6)) then - print *,'IRIFLIP: t=messages off, f=on {t}' + print *,'IRIFLIP: t=messages off, f=on {t}' read(5,*) jf(38) - endif + endif print *,'Ni: t=ion composition in %, f=ion densities', & 'in cm-3 {t}' read(5,*) jf(22) @@ -294,7 +294,7 @@ c jf(46)=.false. ! t=HNEE=2000 f=user input oarr(90) endif c if(piktab.gt.3) jf(24)=.false. -c option to enter six additional parameters +c option to enter six additional parameters c if(PIKTAB.eq.3) then @@ -312,11 +312,11 @@ c print *,' spread-F probability [48]' print *,' equatorial vertical ion drift [44]' print *,' foF2_storm/foF2_quiet [45]' - print *,' foE_storm/foE_quiet [47]' + print *,' foE_storm/foE_quiet [47]' print *,' eqward auroral boundy CGM-Lat [58]' c print *,' solar zenith angle [23]' -c print *,' modified dip latitude [27]' - print *,' Ap for current UT [51]' +c print *,' modified dip latitude [27]' + print *,' Ap for current UT [51]' read(5,*) (pad1(j),j=1,6) c change defaults for computation of specific parameters jf(21)=.true. ! spread-F prob. computed @@ -332,21 +332,21 @@ c change defaults for computation of specific parameters pad1(6)=51 ! ap for current UT endif endif - + c option to enter measured values for NmF2, hmF2, NmF1, hmF1, NmE, hmE, -c B0, N(300), N(400), N(600) if available; +c B0, N(300), N(400), N(600) if available; c print *,' ' print *,' ' print *,' ' - numstp=int((vend-vbeg)/vstp)+1 + numstp=int((vend-vbeg)/vstp)+1 if(ivar.eq.1) numstp=1 if(jf(1)) then if(.not.jf(8).or..not.jf(9).or..not.jf(13).or..not.jf(14).or. & .not.jf(15).or..not.jf(16).or..not.jf(43).or..not.jf(44)) then var=vbeg i=1 -c --------- user input: foF2 or NmF2 +c --------- user input: foF2 or NmF2 2234 if(.not.jf(8)) then jf(26)=.false. ! storm model off, if user input print *,'foF2/Mhz or NmF2/m-3 for ',itext(ivar), @@ -355,7 +355,7 @@ c --------- user input: foF2 or NmF2 pname(1)='foF2/MHz' if(oar(1,i).gt.30.) pname(1)='NmF2/m-3' endif -c --------- user input: hmf2 or M(3000)F2 +c --------- user input: hmf2 or M(3000)F2 if(.not.jf(9)) then print *,'hmF2/km or M3000F2 for ',itext(ivar), & '=',var @@ -363,7 +363,7 @@ c --------- user input: hmf2 or M(3000)F2 pname(2)='M(3000)F2' if(oar(2,i).gt.50.) pname(2)='hmF2/km' endif -c --------- user input: foF1 or NmF1 +c --------- user input: foF1 or NmF1 if(.not.jf(13)) then print *,'foF1/MHz or NmF1/m-3 for ',itext(ivar), & '=',var @@ -371,13 +371,13 @@ c --------- user input: foF1 or NmF1 pname(3)='foF1/MHz' if(oar(3,i).gt.30.) pname(3)='NmF1/m-3' endif -c --------- user input: hmF1 +c --------- user input: hmF1 if(.not.jf(14)) then print *,'hmF1/km for ',itext(ivar),'=',var read(5,*) oar(4,i) pname(4)='hmF1/km' endif -c --------- user input: foE or NmE +c --------- user input: foE or NmE if(.not.jf(15)) then print *,'foE/MHz or NmE/m-3 for ',itext(ivar), & '=',var @@ -385,19 +385,19 @@ c --------- user input: foE or NmE pname(5)='foE/MHz' if(oar(5,i).gt.30.) pname(5)='NmE/m-3' endif -c --------- user input: hmE +c --------- user input: hmE if(.not.jf(16)) then print *,'hmE/km for ',itext(ivar),'=',var read(5,*) oar(6,i) pname(6)='hmE/km' endif -c --------- user input: B0 +c --------- user input: B0 if(.not.jf(43)) then print *,'B0/km for ',itext(ivar),'=',var read(5,*) oar(10,i) pname(7)='B0/km ' endif -c --------- user input: B1 +c --------- user input: B1 if(.not.jf(44)) then print *,'B1 for ',itext(ivar),'=',var read(5,*) oar(35,i) @@ -413,14 +413,14 @@ c option to enter Ne for Te-Ne relationship c if(jf(2).and..not.jf(10)) then var=vbeg - do 1235 i=1,numstp + do 1235 i=1,numstp print *,'Ne(300km),Ne(400km)/m-3', & ' for ',itext(ivar),'=',var,' [-1 if not]' read(5,*) oar(15,i),oar(16,i) 1235 var=var+vstp endif -c option to enter F107D and/or F107_81 +c option to enter F107D and/or F107_81 c if(.not.jf(25)) then print *,'User input for F10.7D' @@ -543,13 +543,13 @@ c if(jf(25)) fdopt=' ' f8opt=' user input' if(jf(32)) f8opt=' ' - + hxx=hx jmag=jm mmdd=imd c calling IRI subroutine -c +c phour=hour call iri_web(jmag,jf,xlat,xlon,iy,mmdd,iut,hour, & hxx,htec_max,ivar,vbeg,vend,vstp,outf,oar) @@ -581,8 +581,8 @@ c if(.not.jf(43)) then write(7,302) pname(7) write(7,402) (oar(10,i),i=1,numi) - endif - endif + endif + endif if(jf(2)) write(7,3292) topt,tsopt if(jf(3)) write(7,329) iopt @@ -610,9 +610,9 @@ c & A2,2X,A4,' Lat/Long/Alt=',F5.1,'/',F6.1,'/',F6.1/) 3914 format(/'TEC [1.E16 m-2] is obtained by numerical integ', & 'ration in 1km steps'/' from 50 to ',f6.1,' km. ', - & 't is the percentage of TEC above the F peak.') + & 't is the percentage of TEC above the F peak.') 3916 format(/'M3000F2: Propagation factor related to hmF2'/ - & 'B0: bottomside thickness parameter.') + & 'B0: bottomside thickness parameter.') 301 format(A4,' maps are used for the F2 peak density (NmF2)') 302 format(A9,' provided by user:') 402 format(7(1PE10.3)) @@ -655,7 +655,7 @@ c if(jmag.gt.0.and.(ivar.eq.2.or.ivar.eq.3)) xtex='GEOM' if(iut.gt.0.and.ivar.eq.8) xtex='U.T.' - IF(PIKTAB.EQ.4) WRITE(7,8199) + IF(PIKTAB.EQ.4) WRITE(7,8199) IF(PIKTAB.EQ.3) WRITE(7,8191) ITEXT(IVAR), & (pna(pad1(j)),j=1,6),xtex,(uni(pad1(j)),j=1,6) IF(PIKTAB.EQ.2) WRITE(7,8194) ITEXT(IVAR),xtex @@ -665,7 +665,7 @@ c if(jf(22)) then WRITE(7,8193) ITEXT(IVAR),xtex else - WRITE(7,9193) ITEXT(IVAR),xtex + WRITE(7,9193) ITEXT(IVAR),xtex endif ENDIF 8191 FORMAT(/'-'/2X,A5,6A10/3X,A4,6A10) @@ -688,13 +688,13 @@ c c c output: D-region PIKTAB=4 c -c D-REGION ELECTRON DENSITY IN CM-3: -c IRI-07 FIRI Danilov:SW/WA=0/0 0.5/0 1/0 0/0.5 0/1 +c D-REGION ELECTRON DENSITY IN CM-3: +c IRI-07 FIRI Danilov:SW/WA=0/0 0.5/0 1/0 0/0.5 0/1 c DRS-95: Stratos Warming/Winter Anomaly c if(piktab.eq.4) then - do 2591 lix=1,77 + do 2591 lix=1,77 jdprof(lix)=-1 dichte=outf(14,lix) 2591 if(dichte.gt.0.) jdprof(lix)=int(dichte/1.e6+0.5) @@ -703,11 +703,11 @@ c WRITE(7,3810) ihtemp,jdprof(lix),jdprof(lix+11), & jdprof(lix+22),jdprof(lix+33),jdprof(lix+44), & jdprof(lix+55),jdprof(lix+66) -2592 continue +2592 continue 3810 FORMAT(I3,7I8) goto 2357 endif - + xcor=vbeg do 1234 li=1,numstp @@ -864,9 +864,9 @@ c & outf(11,li),outf(9,li),outf(8,li) 1234 xcor=xcor+vstp -2357 print *,'Enter 0 to exit or 1 to generate another profile?' +2357 print *,'Enter 0 to exit or 1 to generate another profile?' read(5,*) icontinue if (icontinue.gt.0) goto 1 - print *,oar(51,1),oar(52,1),oar(83,1) + print *,oar(51,1),oar(52,1),oar(83,1) stop end diff --git a/RMextract/pyiri/notes_install.txt b/RMextract/pyiri/notes_install.txt index 1e3ce1e..96191cb 100644 --- a/RMextract/pyiri/notes_install.txt +++ b/RMextract/pyiri/notes_install.txt @@ -25,4 +25,3 @@ same for readapf107()...? Compile: f2py -c -m iri iri.pyf iritest.for irisub.for irifun.for iritec.for iridreg.for igrf.for cira.for iriflip.for - diff --git a/RMextract/pyiri/pyiri.py b/RMextract/pyiri/pyiri.py index d9f8102..54c17d6 100644 --- a/RMextract/pyiri/pyiri.py +++ b/RMextract/pyiri/pyiri.py @@ -6,42 +6,89 @@ class pyiri: - def __init__(self,year=2016,month=5,day=12,hour=1.,lon=0.,lat=0.): - self.lon=lon - self.lat=lat - self.yr=year - self.month=month - self.day=day - self.hour=hour - self.flags=np.ones(50,dtype=bool) #to do, check which flags to set - self.jmag=0 #geographic (0) or geomagnetic (1) coordinates - self.datapath=resource_filename(__name__,'ig_rz.dat').replace('ig_rz.dat','') - - - def get_profile(self,hstart,hend,hstep): - #res=_iri.iri_sub(self.flags,jmag=self.jmag,alati=self.lat,along=self.lon,iyyyy=self.yr,mmdd=self.month*100+self.day,dhour=self.hour,heibeg=hstart,heiend=hend,heistp=hstep)[0][0] - res=_iri.iri_get_sub(self.datapath,self.flags,jmag=self.jmag,alati=self.lat,along=self.lon,iyyyy=self.yr,mmdd=self.month*100+self.day,dhour=self.hour,heibeg=hstart,heiend=hend,heistp=hstep)[0][0] - myshape=np.arange(hstart,hend+hstep,hstep).shape[0] + def __init__(self, year=2016, month=5, day=12, hour=1.0, lon=0.0, lat=0.0): + self.lon = lon + self.lat = lat + self.yr = year + self.month = month + self.day = day + self.hour = hour + self.flags = np.ones(50, dtype=bool) # to do, check which flags to set + self.jmag = 0 # geographic (0) or geomagnetic (1) coordinates + self.datapath = resource_filename(__name__, "ig_rz.dat").replace( + "ig_rz.dat", "" + ) + + def get_profile(self, hstart, hend, hstep): + # res=_iri.iri_sub(self.flags,jmag=self.jmag,alati=self.lat,along=self.lon,iyyyy=self.yr,mmdd=self.month*100+self.day,dhour=self.hour,heibeg=hstart,heiend=hend,heistp=hstep)[0][0] + res = _iri.iri_get_sub( + self.datapath, + self.flags, + jmag=self.jmag, + alati=self.lat, + along=self.lon, + iyyyy=self.yr, + mmdd=self.month * 100 + self.day, + dhour=self.hour, + heibeg=hstart, + heiend=hend, + heistp=hstep, + )[0][0] + myshape = np.arange(hstart, hend + hstep, hstep).shape[0] return res[:myshape] def get_tec(self): - #res=_iri.iri_sub(self.flags,jmag=self.jmag,alati=self.lat,along=self.lon,iyyyy=self.yr,mmdd=self.month*100+self.day,dhour=self.hour,heibeg=hstart,heiend=hend,heistp=hstep)[0][0] - res=_iri.iri_get_tec(self.datapath,self.flags,jmag=self.jmag,alati=self.lat,along=self.lon,iyyyy=self.yr,mmdd=self.month*100+self.day,dhour=self.hour,heibeg=50,heiend=1500) + # res=_iri.iri_sub(self.flags,jmag=self.jmag,alati=self.lat,along=self.lon,iyyyy=self.yr,mmdd=self.month*100+self.day,dhour=self.hour,heibeg=hstart,heiend=hend,heistp=hstep)[0][0] + res = _iri.iri_get_tec( + self.datapath, + self.flags, + jmag=self.jmag, + alati=self.lat, + along=self.lon, + iyyyy=self.yr, + mmdd=self.month * 100 + self.day, + dhour=self.hour, + heibeg=50, + heiend=1500, + ) return res - def get_sub(self,hstart=399,hend=400,hstep=1): - res=_iri.iri_get_sub(self.datapath,self.flags,jmag=self.jmag,alati=self.lat,along=self.lon,iyyyy=self.yr,mmdd=self.month*100+self.day,dhour=self.hour,heibeg=hstart,heiend=hend,heistp=hstep) - #res=_iri.iri_get_tec(self.datapath,self.flags,jmag=self.jmag,alati=self.lat,along=self.lon,iyyyy=self.yr,mmdd=self.month*100+self.day,dhour=self.hour,heibeg=50,heiend=1500) + def get_sub(self, hstart=399, hend=400, hstep=1): + res = _iri.iri_get_sub( + self.datapath, + self.flags, + jmag=self.jmag, + alati=self.lat, + along=self.lon, + iyyyy=self.yr, + mmdd=self.month * 100 + self.day, + dhour=self.hour, + heibeg=hstart, + heiend=hend, + heistp=hstep, + ) + # res=_iri.iri_get_tec(self.datapath,self.flags,jmag=self.jmag,alati=self.lat,along=self.lon,iyyyy=self.yr,mmdd=self.month*100+self.day,dhour=self.hour,heibeg=50,heiend=1500) return res - def get_hprofile(self,h): - #res=_iri.iri_sub(self.flags,jmag=self.jmag,alati=self.lat,along=self.lon,iyyyy=self.yr,mmdd=self.month*100+self.day,dhour=self.hour,heibeg=hstart,heiend=hend,heistp=hstep)[0][0] - heibeg=h[0] - heiend=min(2000,h[-1]) - heistp=(heiend-heibeg)/999. - res=_iri.iri_get_sub(self.datapath,self.flags,jmag=self.jmag,alati=self.lat,along=self.lon,iyyyy=self.yr,mmdd=self.month*100+self.day,dhour=self.hour,heibeg=heibeg,heiend=heiend,heistp=heistp)[0][0] - heights = np.arange(heibeg,heiend+0.5*heistp,heistp) - hinterpol = interp1d(heights,res,fill_value='extrapolate') - + def get_hprofile(self, h): + # res=_iri.iri_sub(self.flags,jmag=self.jmag,alati=self.lat,along=self.lon,iyyyy=self.yr,mmdd=self.month*100+self.day,dhour=self.hour,heibeg=hstart,heiend=hend,heistp=hstep)[0][0] + heibeg = h[0] + heiend = min(2000, h[-1]) + heistp = (heiend - heibeg) / 999.0 + res = _iri.iri_get_sub( + self.datapath, + self.flags, + jmag=self.jmag, + alati=self.lat, + along=self.lon, + iyyyy=self.yr, + mmdd=self.month * 100 + self.day, + dhour=self.hour, + heibeg=heibeg, + heiend=heiend, + heistp=heistp, + )[0][0] + heights = np.arange(heibeg, heiend + 0.5 * heistp, heistp) + hinterpol = interp1d(heights, res, fill_value="extrapolate") + return hinterpol(h) - diff --git a/RMextract/pyiriplas/Iris2017.for b/RMextract/pyiriplas/Iris2017.for index 8fa193e..1315c25 100644 --- a/RMextract/pyiriplas/Iris2017.for +++ b/RMextract/pyiriplas/Iris2017.for @@ -21,8 +21,8 @@ C***************************************************************** C**************** ALL-IN-ONE SUBROUTINE ************************* C***************************************************************** C includes IRIS2017.FOR (computes parameters for specified -C altitude range, for specified altitude, latitude, longitude, -C year, month, day,day of year, or hour range) +C altitude range, for specified altitude, latitude, longitude, +C year, month, day,day of year, or hour range) C IRI2001 STORM-MODEL INCLUDED from IRI2001 (D.Bilitza, June 2001) C C IRI2001 functions B0_98 (instead of B0_TAB), xe3_1, xe4_1 included @@ -31,26 +31,26 @@ C C SMI: HPL,XNEPL,NE(H) AND TECPL FOR 1336 KM : 20000 KM INCLUDED C Changed Feb. 2008 : SMI extension at [h05top : hpl]. hpl<=20000 km !!! C -C SUBROUTINE GKPM PRODUCING KP AND KPM INDICES INCLUDED +C SUBROUTINE GKPM PRODUCING KP AND KPM INDICES INCLUDED C (T.Gulyaeva, Sep. 2001) C***************************************************************** C C*05/05/2017 Solar activity smoothed proxy index specified by jind: -C* jind =1 ssn1_12.dat DEFAULT: SSN1 => rz(3); F10.7 => sf(3) +C* jind =1 ssn1_12.dat DEFAULT: SSN1 => rz(3); F10.7 => sf(3) C* jind =2 ssn2_12.dat SSN2 converted to SSN1 => rz(3); F10.7 => sf(3) -C* jind =3 f107_12.dat F10.7 => sf(3) converted to SSN1 => rz(3) +C* jind =3 f107_12.dat F10.7 => sf(3) converted to SSN1 => rz(3) C* jind =4 geci_12.dat GEC => rz(3); F10.7 => sf(3) C* jind =5 teci_12.dat TEC => rz(3); F10.7 => sf(3) C* jind =6 igin_12.dat IG => rz(3); F10.7 => sf(3) C* jind =7 mgii_12.dat MgII => rz(3); F10.7 => sf(3) C* Jind =8 lyma_12.dat Lyman-alpha => rz(3); F10.7 => sf(3) C* Ref. T.L.Gulyaeva et al., 2017. TEC proxy index of solar activity for the -C* International Reference Ionosphere IRI and its extension to +C* International Reference Ionosphere IRI and its extension to C* Plasmasphere IRI-PLAS model. Int. J. Sci. Eng. Applied Sci., 3, 5, 144-150, C* http://ijseas.com/index.php/issue-archive-2/volume3/issue-5/ C - SUBROUTINE IRIS2017(JF,JMAG,ALATI,ALONG,IYYYY,MMDD,DHOUR, - & HEIBEG,HEIEND,NUMHEI,OUTF,JIND) + SUBROUTINE IRIS2017(JF,JMAG,ALATI,ALONG,IYYYY,MMDD,DHOUR, + & HEIBEG,HEIEND,NUMHEI,OUTF,JIND) C----------------------------------------------------------------- C C INPUT: ALATI,ALONG LATITUDE NORTH AND LONGITUDE EAST IN DEGREES @@ -91,9 +91,9 @@ C jf(21) =.true. OARR(41)=user input for daily F10.7 index C jf(23) =.false. OARR(41)=user input for daily F10.7 index C optional for jf(21:24); default is F10.7D=COV C jf(25) =.false. OARR(41)=user input for daily F10.7 index -C if oarr(41).le.0 then 12-month running mean is +C if oarr(41).le.0 then 12-month running mean is C taken from internal file] -C* jf(27) =.false. OARR(39)=user input for selected solar proxy +C* jf(27) =.false. OARR(39)=user input for selected solar proxy C+++++++++++++++++++++vvvv C C JF(1:11)=.TRUE. GENERATES THE STANDARD IRI-90 PARAMETERS. @@ -121,7 +121,7 @@ C OUTF(6,*) H+ ION DENSITY/M-3 C OUTF(7,*) HE+ ION DENSITY/M-3 C OUTF(8,*) O2+ ION DENSITY/M-3 C OUTF(9,*) NO+ ION DENSITY/M-3 -C OUTF(10,*) PLASMA FREQUENCY/MHz +C OUTF(10,*) PLASMA FREQUENCY/MHz C OUTF(11,*) LOG NE(M-3) // TECeff in step of 200 km C !!! MODIFIED FOR OUTPUT RESULTS OUTF(10,*) & OUTF(11,*) !!! C ============================================================= @@ -148,8 +148,8 @@ C OARR(33) = RZS (SUNSPOT INPUT) C OARR(35) = B1 OARR(36) = M(3000)F2 C OARR(37) = LATI OARR(38) = LONGI C OARR(39) = gind OARR(40) = MLONG -C OARR(41)=f107d OARR(42) = MLAT -C OARR(43)=daynr OARR(44) = gmlt +C OARR(41)=f107d OARR(42) = MLAT +C OARR(43)=daynr OARR(44) = gmlt C OARR(45)=stormcor OARR(46)= Hscale_top C------------------------------------------------------------------- C****************************************************************** @@ -163,7 +163,7 @@ C********* INTERNALLY ************** C********* ALL ANGLES ARE IN DEGREE ************** C********* ALL DENSITIES ARE IN M-3 ************** C********* ALL ALTITUDES ARE IN KM ************** -C********* ELECTRON CONTENT*1E-16 IN M-2 ************** +C********* ELECTRON CONTENT*1E-16 IN M-2 ************** C********* ALL TEMPERATURES ARE IN KELVIN ************** C********* ALL TIMES ARE IN DECIMAL HOURS ************** C***************************************************************** @@ -172,25 +172,25 @@ C***************************************************************** INTEGER DAYNR,DDO,DO2,SEASON,SEADAY,NUMHEI REAL LATI,MO2,MO,MODIP,NMF2,MAGBR REAL NMF1,NME,NMD,MM,MLAT,MLONG,NOBO2,NEI,RZS,COV - real:: tetitn(3) + real:: tetitn(3) CHARACTER FILNAM*12 - CHARACTER*4 xxpr,yypr + CHARACTER*4 xxpr,yypr DIMENSION F(3),RIF(4),E(4),XDELS(4),DNDS(4) DIMENSION FF0(988),XM0(441),F2(13,76,2),FM3(9,49,2) DIMENSION FF0N(988),XM0N(441),F2N(13,76,2),FM3N(9,49,2) - DIMENSION AMP(4),HXL(4),SCL(4) + DIMENSION AMP(4),HXL(4),SCL(4) DIMENSION XSM(4),MM(5),DTI(4) DIMENSION AHH(7),STTE(6),DTE(5),ATE(7),TEA(6),XNAR(3) DIMENSION PG1O(80),PG2O(32),PG3O(80),PF1O(12),PF2O(4),PF3O(12) DIMENSION HO(4),MO(5),DDO(4),HO2(2),MO2(3),DO2(2),DION(7) - DIMENSION OUTF(0:11,0:120),OARR(50),ARIG(3),RZAR(3) + DIMENSION OUTF(0:11,0:120),OARR(50),ARIG(3),RZAR(3) DIMENSION INDAP(13),AKP(13),icurkp(0:7),iprekp(0:7) LOGICAL EXT,SCHALT,NIGHT,TECON(3),sam_mon,sam_yea,sam_ut LOGICAL F1REG,FOF2IN,HMF2IN,URSIF2,LAYVER,DY,GULB0 LOGICAL NODEN,NOTEM,NOION,TENEOP,sam_doy,TECIN LOGICAL OLD79,JF(30),URSIFO,RZIN,INKP,F1_OCPRO,F1_L_COND LOGICAL FOF1IN,HMF1IN,FOEIN,HMEIN,DREG,sam_jind - &,IGIN,igino,rzino + &,IGIN,igino,rzino &,sam_date COMMON /BLOCK1/HMF2,NMF2,HMF1,F1REG /CONST/UMR,PI & /BLOCK2/B0,B1,C1 /BLOCK3/HZ,T,HST,STR @@ -206,7 +206,7 @@ C***************************************************************** &/dem/W,ylongi,hour,daynr,cn1000,alon,blon,enre,HSC common /temod/month COMMON /FIKP/icurkp,iprekp,iyear_cur,imn_cur,idy_cur - COMMON /BXY/xxpr,yypr + COMMON /BXY/xxpr,yypr EXTERNAL XE1,XE2,XE3,XE3_1,XE4,XE5,XE6,XXE6,TEDER,ABLON DATA XNAR /3*0.0/, & XDELS /3*5.,10./, DNDS /.016,.01,2*.016/, @@ -287,7 +287,7 @@ c if(F1_OCPRO) F1_L_COND=(.not.jf(20)) DREG=jf(24) C - IF (XKP.GE.0.0) THEN + IF (XKP.GE.0.0) THEN INKP=.TRUE. ELSE INKP=.FALSE. @@ -305,7 +305,7 @@ c ENDIF IGIN=(.not.jf(27)) ! Add IF(IGIN) THEN ! - AIGIN=OARR(39) ! + AIGIN=OARR(39) ! else oarr(39)=-1. ENDIF ! @@ -388,7 +388,7 @@ C 8154 IF(XNAR(JXNAR).GT.0.) TECON(JXNAR)=.TRUE. else oarr(15)=-1. ! - oarr(16)=-1. ! + oarr(16)=-1. ! C! oarr(3)=-1. C! oarr(4)=-1. C! oarr(5)=-1. @@ -404,16 +404,16 @@ c if(LAYVER) write(*,*) 'Ne, E-F: The LAY-Version is ', c & 'prelimenary. Erroneous profile features can occur.' c if(GULB0) write(*,*) 'Ne, B0: Bottomside thickness is ', c & 'obtained with Gulyaeva-1987 model.' - if(tecin) then + if(tecin) then write(*,*) 'TEC: input values are used.' - write(*,*) ' hmF2: CCIR model is fitted to TEC.' + write(*,*) ' hmF2: CCIR model is fitted to TEC.' write(*,*) 'Ne, foF2: CCIR model is fitted to TEC.' goto 8201 endif if(OLD79) write(*,*) 'Ne: Using IRI-79. Correction', & ' of equatorial topside is not included.' if (.not.(HMF2IN)) THEN - write(*,*) ' hmF2: CCIR model is used.' + write(*,*) ' hmF2: CCIR model is used.' goto 700 ELSE if(hmf2.GT.0.) then @@ -443,7 +443,7 @@ c & 'obtained with Gulyaeva-1987 model.' & write(*,*) 'Te: Temperature-density correlation is used.' 8201 continue C -C**** +C**** C CALCULATION OF DAY OF YEAR AND SUN DECLINATION...................... C CALCULATION OF UT/LT AND RELATED YEAR, MONTH, DAYNRs ............... C CALCULATION OF (UT-)SEASON (SUMMER=2, WINTER=4)..................... @@ -495,7 +495,7 @@ cc C C_ADD call igrf_dip(lati,ylongi,ryear,300.0,dec,dip,magbr,modip) ! NEW IGRF2015 - IF (MAGBR.GT.9998.) THEN + IF (MAGBR.GT.9998.) THEN CALL FIELDG(LATI,LONGI,300.0,XMA,YMA,ZMA,BET,DIP,DEC,MODIP) !OLD POGO-75 MAGBR=ATAN(0.5*TAN(DIP*UMR))/UMR ENDIF @@ -538,13 +538,13 @@ C if(idtmp.ne.daynr) then iyear=iytmp daynr=idtmp - idayinp=iday ! input day + idayinp=iday ! input day call MODA(1,iyear,MONTH,IDAY,DAYNR,nrdaym) -C +C if (iday.ne.idayinp) mmdd=month*100+iday ! corrected day according to UT endif c -c zmonth is decimal month (Jan 1 = 1.0 and Dec 31 = 12.97) +c zmonth is decimal month (Jan 1 = 1.0 and Dec 31 = 12.97) c 2629 zmonth = lmonth + (lday*1.)/lnrday RUT=UT @@ -568,7 +568,7 @@ C+ TLG Day-of-year reduced to 360.=> sday=season_day IF(LATI.GT.0.0) GOTO 5592 SEASON=SEASON-2 IF(SEASON.LT.1) SEASON=SEASON+4 - seamon=zmonth+6. + seamon=zmonth+6. if(seamon.ge.13) seamon=seamon-12. seaday=daynr+idayy/2. ! if(seaday.gt.idayy) seaday=seaday-idayy ! @@ -579,9 +579,9 @@ C C MEAN F10.7CM SOLAR RADIO FLUX (COV), GLOBAL IONOSPHERIC INDEX C (GIND) C -C 12-month running mean sunspot number (rssn) and Ionospheric Global -C index (gind), daily F10.7 cm solar radio flux (f107d) and monthly -C F10.7 (cov) index +C 12-month running mean sunspot number (rssn) and Ionospheric Global +C index (gind), daily F10.7 cm solar radio flux (f107d) and monthly +C F10.7 (cov) index C 5592 sam_mon=(month.eq.montho) sam_yea=(iyear.eq.iyearo) @@ -591,16 +591,16 @@ C sam_ut=(ut.eq.ut0) ! if(sam_date.and..not.rzino.and..not.rzin. ! & and..not.igin.and..not.igino) goto 2910 ! -C if you want to use the ig_rz.dat version of the coefficients, please use -C the statements commented +C if you want to use the ig_rz.dat version of the coefficients, please use +C the statements commented C call tcon(iyear,month,iday,daynr,rzar,arig,ttt,nmonth) ! ig_rz.dat C C NEW TLG: the following statements commented are using gec_rz.dat file: - IF (jind.eq.0) THEN + IF (jind.eq.0) THEN call tcongec(iyear,month,iday,daynr,rzar,arig,ttt,nmonth) ! gec_rz.dat - ELSE -C* NEW TLG May 2017: the following statement for different solar proxies input -C* R12 proxy - rsar(3), F10.7 proxy - arig(3); jind - option for proxy input: + ELSE +C* NEW TLG May 2017: the following statement for different solar proxies input +C* R12 proxy - rsar(3), F10.7 proxy - arig(3); jind - option for proxy input: call tconind(iyear,month,iday,daynr,rzar,arig,ttt,nmonth,jind) ENDIF C @@ -611,21 +611,21 @@ C rzar(2) = rrr rzar(3) = rrr C zi=-12.349154+(1.4683266-2.67690893e-03*rrr)*rrr ! ig_rz.dat - IF (jind.eq.0) THEN - zi=((0.0194*rrr+1.0906)-1.0)*50.0 + IF (jind.eq.0) THEN + zi=((0.0194*rrr+1.0906)-1.0)*50.0 if(zi.gt.174.0) zi=174.0 if(zi.lt.0.) zi=10. ! check low limit of IG-index arig(1) = zi arig(2) = zi - arig(3) = zi + arig(3) = zi ELSE cov=62.6645+rzar(3)*0.9066 !* F10.7 proxy - arig(1) = cov + arig(1) = cov arig(2) = cov !* arig(3) = cov !* gind= 0.97236*rzar(3)+0.18836 !* ENDIF !* - endif ! + endif ! C C!++++++ C if(IGIN) then ! ig_rz.dat @@ -636,7 +636,7 @@ C arig(3) = zi ! ig_rz.dat C endif ! ig_rz.dat rssn=rzar(3) IF (jind.eq.0) THEN !* - gind=arig(3) + gind=arig(3) cov=63.75+RSSN*(0.728+RSSN*0.00089) ELSE !* cov=arig(3) @@ -644,17 +644,17 @@ C endif ! ig_rz.dat COVSAT=cov if(covsat.gt.188.) covsat=188. f107d=cov - if(.not.jf(25)) then !* - f107d=oarr(41) !* + if(.not.jf(25)) then !* + f107d=oarr(41) !* C* RSSN=1.076*f107d-65.7817 !* - endif !* + endif !* C C CALCULATION OF SOLAR ZENITH ANGLE (XHI/DEG)......................... C NOON VALUE (XHINON)................................................. C 2910 continue - if(.not.rzin) RZS=rssn ! - rg=rzs ! + if(.not.rzin) RZS=rssn ! + rg=rzs ! CALL SOCO(ldaynr,HOUR,LATI,YLONGI,SUNDEC,XHI,SAX,SUX) CALL SOCO(ldaynr,12.0,LATI,YLONGI,SUNDE1,XHINON,SAXNON,SUXNON) C New: call APF for COV81, RZ81 @@ -662,11 +662,11 @@ C New: call APF for COV81, RZ81 nmono=month C New: call GKPM for calculation of kp_indices and Kpm_index C - IF (INKP) THEN + IF (INKP) THEN GOTO 4 - ELSE + ELSE CALL GKPM(indap,akp,xkp) - ENDIF + ENDIF 4 CONTINUE C C @@ -690,7 +690,7 @@ C DELA=4.32 IF(ABSMDP.GE.18.) DELA=1.0+EXP(-(ABSMDP-30.0)/10.0) DELL=1+EXP(-(ABSLAT-20.)/10.) -C +C C E peak critical frequency (foE), density (NmE), and peak height (hmE) c IF(FOEIN) THEN @@ -808,7 +808,7 @@ C IF (JIND.eq.0) THEN !*TEST RR2=ARIG(1)/100. RR2N=ARIG(2)/100. - ELSE !*TEST + ELSE !*TEST RR2=RZAR(1)/100. !*TEST RR2N=RZAR(2)/100. !*TEST ENDIF !*TEST @@ -840,8 +840,8 @@ C else yfof2 = zfof2 + ttt * (fof2n-zfof2) xm3000 = zm3000+ ttt * (xm300n-zm3000) - endif -501 ratfc=1. + endif +501 ratfc=1. IF(FOF2IN) THEN FOF2=AFOF2 ELSE @@ -866,23 +866,23 @@ CREM FOF2=FOF2*stormcor endif C **************************************************** C -C *** SMI PLASMAPASUE ALTITUDE +C *** SMI PLASMAPASUE ALTITUDE W=RSSN EH=20200. hprr=cos(mlat*umr) HHH=((5.7*hprr*hprr-1.)*6370.+500.)*(1.-0.0825*XKP) ! for hpl(kp) - HPL=20200. ! for GPS-TEC + HPL=20200. ! for GPS-TEC heiend=hpl C C F2 REGION PEAK HEIGHT C IF (HMF2IN) then - IF(AHMF2.LT.50.0) THEN + IF(AHMF2.LT.50.0) THEN XM3000=AHMF2 COLD HMF2=HMF2EDS(RZS,FOF2/FOE,XM3000,HOUR,DAYNR,ABSMLT) ! SMI hmF2 HMF2=PEAKH(FOE,FOF2,XM3000) ENDIF - ELSE + ELSE cIRI HMF2=HMF2ED(MAGBR,RSSN,FOF2/FOE,XM3000) IF (DH2.GT.9998.) then COLD HMF2=HMF2EDS(RZS,FOF2/FOE,XM3000,HOUR,DAYNR,ABSMLT) ! SMI @@ -949,7 +949,7 @@ C# NEXT CALCULATION OF XNE05 IS REQUIRED TO ESTIMATE QF-FACTOR xnetop=XE(H05TOP) C NEW: find topside scale height hsc=hsip(nmf2/e)-hmf2 call topscale1(hsip,scalh,xsc) -c +c CADD+ scalh0=scalh C NEW++++++++++++ 1st call to obtain xnepl: @@ -965,7 +965,7 @@ C c c F layer - bottomside thickness parameter B0 and shape parameters B1 c -C B1=3.0 ! Former B1=const with BO_GUL option +C B1=3.0 ! Former B1=const with BO_GUL option B1=hpol(HOUR,1.9,2.6,SAX,SUX,1.,1.) ! NEW ! Diurnal B1 Formula: 1.9 replace former B0B1 array: @@ -1036,8 +1036,8 @@ c X=HME-HDX XKK=-DXDX*X/(XDX*ALOG(XDX/NME)) c -c if exponent xkk is larger than xkkmax, then xkk will be set to -c xkkmax and d1 will be determined such that the point hdx/xdx is +c if exponent xkk is larger than xkkmax, then xkk will be set to +c xkkmax and d1 will be determined such that the point hdx/xdx is c reached; derivative is no longer continuous. c xkkmax=5. @@ -1062,7 +1062,7 @@ c omit F1 feature if nmf1*0.9 is smaller than nme hef=hef-1. if(hef.le.hme) goto 9427 goto 9245 - endif + endif CALL REGFA1(HEF,HMF2,XE2H,NMF2,0.001,NMF1,XE2,SCHALT,HMF1) IF(.not.SCHALT) GOTO 3801 9427 continue @@ -1403,7 +1403,7 @@ c- call iri_tec(heibeg,h05top,1,tec,tect,tecb) TEC=TEC/1.0E+16 TCB=TEC*TECB/100.0 TCT=TEC*TECT/100.0 ! TCT of IRI-ISO in [hmF2, h05top] - IF (jf(30)) goto 149 ! None TECI input + IF (jf(30)) goto 149 ! None TECI input C C NEW!!! Fitting h05top to TECI input: REPLACED by change of foF2: C @@ -1433,7 +1433,7 @@ C++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ C Search h05top new in the plasmasphere model xnm_pre=NMF2 NMF2=1.24E10*FOF2*FOF2 - xnetop=0.5*NMF2 ! 0.5 NmF2 + xnetop=0.5*NMF2 ! 0.5 NmF2 if (fof2IN) goto 1504 if (hmf2IN) goto 1504 C @@ -1454,7 +1454,7 @@ C C ADD Return to main PROGRAM with updated foF2 and hmF2 OARR(1)=NMF2 OARR(2)=HMF2 - IF (TECIN) RETURN + IF (TECIN) RETURN C ********************************************************* C C CHANGE bottomsode HHALF according new hmF2 @@ -1534,7 +1534,7 @@ c tih=teh-outf(4,kk-1)+outf(3,kk-1) tih=-tih kkti=kk+1 endif -C +C OUTF(2,kk)=TNH OUTF(3,kk)=TIH OUTF(4,kk)=TEH @@ -1603,14 +1603,14 @@ C Check Ti(h<400km) for interpolation: kkti=kk-2 outf(3,kkti)=outf(3,kk400)-100. endif - if (outf(0,kkti).gt.200.) kkti=kk200 + if (outf(0,kkti).gt.200.) kkti=kk200 C Fit Ti-profile at [200km:400km] to Ti(kkti): do i=kk400+1,kk if ((i.lt.kkti).and.(i.gt.kk400)) then outf(3,i)=outf(3,kkti)+(outf(3,kk400)-outf(3,kkti))/ &(outf(0,kk400)-outf(0,kkti))*(outf(0,i)-outf(0,kkti)) endif - if (outf(2,i).gt.outf(3,i)) then + if (outf(2,i).gt.outf(3,i)) then outf(2,i)=outf(3,i)/outf(3,i-1)*outf(2,i-1) ! correct: Tn < Ti endif enddo @@ -1667,7 +1667,7 @@ C OARR(46)=scalh ! OARR(47)=xsc ! CADD+ - OARR(48)=scalh0 ! + OARR(48)=scalh0 ! OARR(49)=DTEC0 ! OARR(50)=fof2rem ! 3330 CONTINUE diff --git a/RMextract/pyiriplas/dgrf1945.dat b/RMextract/pyiriplas/dgrf1945.dat index db34352..641d718 100644 --- a/RMextract/pyiriplas/dgrf1945.dat +++ b/RMextract/pyiriplas/dgrf1945.dat @@ -1,4 +1,4 @@ - dgrf1945 + dgrf1945 10 6371.2 1945.0 -30594 -2285 diff --git a/RMextract/pyiriplas/dgrf1950.dat b/RMextract/pyiriplas/dgrf1950.dat index 7a2b288..b82cca7 100644 --- a/RMextract/pyiriplas/dgrf1950.dat +++ b/RMextract/pyiriplas/dgrf1950.dat @@ -1,4 +1,4 @@ - dgrf1950 + dgrf1950 10 6371.2 1950.0 -30554 -2250 diff --git a/RMextract/pyiriplas/dgrf1955.dat b/RMextract/pyiriplas/dgrf1955.dat index fa3dbc4..6dda483 100644 --- a/RMextract/pyiriplas/dgrf1955.dat +++ b/RMextract/pyiriplas/dgrf1955.dat @@ -1,4 +1,4 @@ - dgrf1955 + dgrf1955 10 6371.2 1955.0 -30500 -2215 diff --git a/RMextract/pyiriplas/dgrf1960.dat b/RMextract/pyiriplas/dgrf1960.dat index 4a23838..8789036 100644 --- a/RMextract/pyiriplas/dgrf1960.dat +++ b/RMextract/pyiriplas/dgrf1960.dat @@ -1,4 +1,4 @@ - dgrf1960 + dgrf1960 10 6371.2 1960.0 -30421 -2169 diff --git a/RMextract/pyiriplas/dgrf1965.dat b/RMextract/pyiriplas/dgrf1965.dat index c395550..16a5d78 100644 --- a/RMextract/pyiriplas/dgrf1965.dat +++ b/RMextract/pyiriplas/dgrf1965.dat @@ -1,4 +1,4 @@ - dgrf1965 + dgrf1965 10 6371.2 1965.0 -30334 -2119 diff --git a/RMextract/pyiriplas/dgrf1970.dat b/RMextract/pyiriplas/dgrf1970.dat index 99b6aba..7b4ecee 100644 --- a/RMextract/pyiriplas/dgrf1970.dat +++ b/RMextract/pyiriplas/dgrf1970.dat @@ -1,4 +1,4 @@ - dgrf1970 + dgrf1970 10 6371.2 1970.0 -30220 -2068 diff --git a/RMextract/pyiriplas/dgrf1975.dat b/RMextract/pyiriplas/dgrf1975.dat index 4523804..3d8e4eb 100644 --- a/RMextract/pyiriplas/dgrf1975.dat +++ b/RMextract/pyiriplas/dgrf1975.dat @@ -1,4 +1,4 @@ - dgrf1975 + dgrf1975 10 6371.2 1975.0 -30100 -2013 diff --git a/RMextract/pyiriplas/dgrf1980.dat b/RMextract/pyiriplas/dgrf1980.dat index 12e723a..bcd7adf 100644 --- a/RMextract/pyiriplas/dgrf1980.dat +++ b/RMextract/pyiriplas/dgrf1980.dat @@ -1,4 +1,4 @@ - dgrf1980 + dgrf1980 10 6371.2 1980.0 -29992 -1956 diff --git a/RMextract/pyiriplas/dgrf1985.dat b/RMextract/pyiriplas/dgrf1985.dat index 033ff2d..f7b4a14 100644 --- a/RMextract/pyiriplas/dgrf1985.dat +++ b/RMextract/pyiriplas/dgrf1985.dat @@ -1,4 +1,4 @@ - dgrf1985 + dgrf1985 10 6371.2 1985.0 -29873 -1905 diff --git a/RMextract/pyiriplas/dgrf1990.dat b/RMextract/pyiriplas/dgrf1990.dat index 219d891..59075c9 100644 --- a/RMextract/pyiriplas/dgrf1990.dat +++ b/RMextract/pyiriplas/dgrf1990.dat @@ -1,4 +1,4 @@ - dgrf1990 + dgrf1990 10 6371.2 1990.0 -29775 -1848 diff --git a/RMextract/pyiriplas/dgrf1995.dat b/RMextract/pyiriplas/dgrf1995.dat index 7e5e0db..df06365 100644 --- a/RMextract/pyiriplas/dgrf1995.dat +++ b/RMextract/pyiriplas/dgrf1995.dat @@ -1,4 +1,4 @@ - dgrf1995 + dgrf1995 10 6371.2 1995.0 -29692 -1784 diff --git a/RMextract/pyiriplas/dgrf2000.dat b/RMextract/pyiriplas/dgrf2000.dat index a4ad108..2ca722f 100644 --- a/RMextract/pyiriplas/dgrf2000.dat +++ b/RMextract/pyiriplas/dgrf2000.dat @@ -1,4 +1,4 @@ - dgrf2000 + dgrf2000 13 6371.2 2000.0 -29619.4 -1728.2 diff --git a/RMextract/pyiriplas/dgrf2005.dat b/RMextract/pyiriplas/dgrf2005.dat index b2312f1..a90c697 100644 --- a/RMextract/pyiriplas/dgrf2005.dat +++ b/RMextract/pyiriplas/dgrf2005.dat @@ -1,4 +1,4 @@ - dgrf2005 + dgrf2005 13 6371.2 2005.0 -29554.63 -1669.05 diff --git a/RMextract/pyiriplas/dgrf2010.dat b/RMextract/pyiriplas/dgrf2010.dat index 12aea5d..81147b0 100644 --- a/RMextract/pyiriplas/dgrf2010.dat +++ b/RMextract/pyiriplas/dgrf2010.dat @@ -1,4 +1,4 @@ - dgrf2010 + dgrf2010 13 6371.2 2010.0 -29496.57 -1586.42 diff --git a/RMextract/pyiriplas/dgrf2015.dat b/RMextract/pyiriplas/dgrf2015.dat index 3273b44..7683b0f 100644 --- a/RMextract/pyiriplas/dgrf2015.dat +++ b/RMextract/pyiriplas/dgrf2015.dat @@ -1,4 +1,4 @@ - dgrf2015 + dgrf2015 13 6371.2 2015.0 -29441.46 -1501.77 diff --git a/RMextract/pyiriplas/geci_12.dat b/RMextract/pyiriplas/geci_12.dat index d055806..e2f6dac 100644 --- a/RMextract/pyiriplas/geci_12.dat +++ b/RMextract/pyiriplas/geci_12.dat @@ -2,60 +2,60 @@ 1,1948,12,2021 - 1948 140.1 138.2 136.0 133.8 131.4 131.0 132.3 136.6 142.9 143.7 139.3 134.8 - 1949 132.3 130.3 128.9 128.8 130.6 131.7 130.2 126.0 120.6 117.3 116.0 114.5 - 1950 111.6 108.6 103.4 96.7 90.4 84.4 80.2 77.1 73.6 70.6 69.8 70.6 - 1951 70.1 68.0 68.3 69.2 68.7 68.3 67.2 65.0 62.1 58.2 52.2 46.3 - 1952 42.8 41.7 39.3 35.9 33.6 32.0 31.0 29.6 28.5 27.9 27.4 26.4 - 1953 24.5 22.1 20.5 19.6 18.1 16.0 13.7 12.5 12.4 11.4 9.9 8.5 - 1954 7.5 6.8 5.5 4.7 5.0 5.5 6.6 8.4 8.9 9.0 10.6 12.9 - 1955 15.1 17.2 20.1 23.9 29.0 35.1 39.9 46.0 54.6 63.1 71.4 79.0 - 1956 86.5 95.8 106.1 115.1 123.5 132.6 140.8 144.7 146.5 150.7 154.3 158.8 - 1957 164.5 166.4 168.4 174.8 179.1 181.4 184.8 187.6 190.4 192.5 193.8 193.0 - 1958 192.0 193.9 194.2 189.9 184.7 180.3 178.8 178.5 177.5 175.9 174.5 174.3 - 1959 172.5 170.9 168.6 163.5 159.6 156.0 150.7 146.4 141.6 136.6 132.8 128.4 - 1960 124.9 121.2 117.9 116.0 113.5 110.5 105.5 99.5 95.2 90.8 85.6 81.6 - 1961 78.3 73.1 67.3 63.0 59.0 54.9 52.3 51.7 51.5 50.7 49.8 48.1 - 1962 44.7 41.5 39.6 39.2 39.0 38.1 36.7 34.9 32.8 31.0 30.2 30.0 - 1963 29.6 30.0 29.9 29.2 28.9 28.5 28.0 27.5 27.2 26.4 24.2 21.9 - 1964 20.1 18.5 16.2 13.6 11.8 11.2 11.3 11.2 10.9 10.7 11.1 12.0 - 1965 12.7 12.9 13.4 14.5 15.3 15.8 16.3 17.2 18.1 20.3 22.8 24.9 - 1966 28.0 31.4 34.5 37.3 40.4 44.2 49.6 55.7 61.9 66.2 68.7 71.1 - 1967 73.3 76.9 80.2 82.5 85.3 88.9 91.6 92.7 92.7 92.4 94.4 97.8 - 1968 99.7 100.0 101.7 104.1 104.5 103.5 102.2 101.8 103.9 106.7 107.4 106.9 - 1969 106.8 106.4 104.9 103.4 103.2 103.1 102.9 103.5 102.4 101.2 101.6 101.9 - 1970 102.6 103.0 103.2 103.1 102.8 102.3 100.9 98.2 94.5 91.4 87.1 82.0 - 1971 78.5 76.0 72.7 69.4 66.7 65.3 64.1 63.3 64.5 64.9 65.4 67.9 - 1972 69.3 69.6 70.8 71.8 71.3 69.0 66.8 64.2 61.0 59.5 57.7 54.2 - 1973 50.2 46.0 43.8 42.4 40.4 38.9 37.4 36.0 34.4 32.7 31.9 31.6 - 1974 32.8 34.4 34.0 33.9 34.6 34.5 34.0 33.2 32.2 30.4 27.8 25.6 - 1975 23.5 22.6 21.8 19.3 17.4 16.8 15.8 15.2 15.2 16.2 16.9 17.1 - 1976 16.0 14.1 13.1 13.5 13.4 13.1 13.8 14.9 15.2 14.4 14.4 15.6 - 1977 17.4 18.8 20.6 22.7 24.6 26.6 29.2 33.4 38.9 45.1 51.2 55.9 - 1978 60.2 63.2 68.1 75.1 81.1 87.0 94.7 101.1 105.3 107.9 110.0 114.2 - 1979 119.9 126.8 132.2 136.6 142.4 148.0 149.9 150.3 150.6 152.6 156.9 159.0 - 1980 158.4 157.2 155.6 153.4 151.1 149.6 147.7 145.4 145.2 145.3 142.9 138.1 - 1981 135.8 137.0 138.4 138.8 138.3 137.0 135.8 136.6 138.2 137.6 134.4 133.4 - 1982 132.7 129.1 125.2 120.5 116.3 113.8 111.8 106.2 98.3 93.1 92.2 92.1 - 1983 90.3 87.9 83.7 79.4 75.3 69.0 64.1 64.4 66.5 66.7 65.3 62.7 - 1984 59.0 55.5 52.2 49.1 46.9 46.0 43.8 39.4 33.9 29.1 25.1 22.2 - 1985 21.1 20.2 19.2 19.0 19.0 18.7 18.1 17.8 18.0 18.0 17.5 16.1 - 1986 14.7 14.0 13.9 14.6 15.2 14.7 14.6 14.1 13.2 14.1 15.7 17.1 - 1987 18.3 20.2 22.6 24.8 26.8 28.7 31.3 34.8 38.8 43.1 46.2 50.6 - 1988 57.2 63.3 69.7 75.7 81.7 91.2 101.3 110.3 117.5 121.5 126.2 133.1 - 1989 137.4 140.2 144.7 148.4 151.6 153.1 153.1 152.4 151.3 152.1 152.3 148.5 - 1990 145.7 147.9 147.0 144.4 142.2 139.2 136.1 136.0 137.5 137.5 137.2 139.3 - 1991 142.8 142.8 141.9 141.8 140.8 140.5 141.6 141.9 140.2 137.2 133.7 127.6 - 1992 119.9 112.0 105.1 100.4 97.5 94.4 88.3 81.9 77.6 74.6 72.7 71.6 - 1993 69.8 67.8 65.2 62.4 58.8 55.2 53.8 51.5 47.8 44.5 40.9 38.2 - 1994 36.5 34.8 34.1 33.7 32.6 31.0 29.9 28.7 27.0 23.6 22.4 21.3 - 1995 21.3 20.1 20.7 21.3 21.3 20.1 19.0 17.8 16.1 13.8 12.6 12.1 - 1996 12.1 12.1 12.1 12.6 12.6 12.1 12.1 12.1 12.1 11.5 11.5 12.1 - 1997 12.6 13.2 14.9 17.2 20.1 22.4 24.1 25.9 27.6 29.9 31.0 32.8 - 1998 35.6 39.1 42.6 46.6 51.2 55.2 57.5 59.8 62.1 63.3 64.4 66.7 - 1999 69.6 71.9 74.2 79.4 83.4 86.3 88.0 90.3 96.1 98.9 100.1 103.0 - 2000 105.3 105.8 105.8 110.4 116.2 117.3 116.2 116.8 116.2 111.6 106.4 105.8 - 2001 105.3 104.1 105.3 109.3 113.3 114.5 117.3 120.8 120.2 118.5 116.8 116.8 + 1948 140.1 138.2 136.0 133.8 131.4 131.0 132.3 136.6 142.9 143.7 139.3 134.8 + 1949 132.3 130.3 128.9 128.8 130.6 131.7 130.2 126.0 120.6 117.3 116.0 114.5 + 1950 111.6 108.6 103.4 96.7 90.4 84.4 80.2 77.1 73.6 70.6 69.8 70.6 + 1951 70.1 68.0 68.3 69.2 68.7 68.3 67.2 65.0 62.1 58.2 52.2 46.3 + 1952 42.8 41.7 39.3 35.9 33.6 32.0 31.0 29.6 28.5 27.9 27.4 26.4 + 1953 24.5 22.1 20.5 19.6 18.1 16.0 13.7 12.5 12.4 11.4 9.9 8.5 + 1954 7.5 6.8 5.5 4.7 5.0 5.5 6.6 8.4 8.9 9.0 10.6 12.9 + 1955 15.1 17.2 20.1 23.9 29.0 35.1 39.9 46.0 54.6 63.1 71.4 79.0 + 1956 86.5 95.8 106.1 115.1 123.5 132.6 140.8 144.7 146.5 150.7 154.3 158.8 + 1957 164.5 166.4 168.4 174.8 179.1 181.4 184.8 187.6 190.4 192.5 193.8 193.0 + 1958 192.0 193.9 194.2 189.9 184.7 180.3 178.8 178.5 177.5 175.9 174.5 174.3 + 1959 172.5 170.9 168.6 163.5 159.6 156.0 150.7 146.4 141.6 136.6 132.8 128.4 + 1960 124.9 121.2 117.9 116.0 113.5 110.5 105.5 99.5 95.2 90.8 85.6 81.6 + 1961 78.3 73.1 67.3 63.0 59.0 54.9 52.3 51.7 51.5 50.7 49.8 48.1 + 1962 44.7 41.5 39.6 39.2 39.0 38.1 36.7 34.9 32.8 31.0 30.2 30.0 + 1963 29.6 30.0 29.9 29.2 28.9 28.5 28.0 27.5 27.2 26.4 24.2 21.9 + 1964 20.1 18.5 16.2 13.6 11.8 11.2 11.3 11.2 10.9 10.7 11.1 12.0 + 1965 12.7 12.9 13.4 14.5 15.3 15.8 16.3 17.2 18.1 20.3 22.8 24.9 + 1966 28.0 31.4 34.5 37.3 40.4 44.2 49.6 55.7 61.9 66.2 68.7 71.1 + 1967 73.3 76.9 80.2 82.5 85.3 88.9 91.6 92.7 92.7 92.4 94.4 97.8 + 1968 99.7 100.0 101.7 104.1 104.5 103.5 102.2 101.8 103.9 106.7 107.4 106.9 + 1969 106.8 106.4 104.9 103.4 103.2 103.1 102.9 103.5 102.4 101.2 101.6 101.9 + 1970 102.6 103.0 103.2 103.1 102.8 102.3 100.9 98.2 94.5 91.4 87.1 82.0 + 1971 78.5 76.0 72.7 69.4 66.7 65.3 64.1 63.3 64.5 64.9 65.4 67.9 + 1972 69.3 69.6 70.8 71.8 71.3 69.0 66.8 64.2 61.0 59.5 57.7 54.2 + 1973 50.2 46.0 43.8 42.4 40.4 38.9 37.4 36.0 34.4 32.7 31.9 31.6 + 1974 32.8 34.4 34.0 33.9 34.6 34.5 34.0 33.2 32.2 30.4 27.8 25.6 + 1975 23.5 22.6 21.8 19.3 17.4 16.8 15.8 15.2 15.2 16.2 16.9 17.1 + 1976 16.0 14.1 13.1 13.5 13.4 13.1 13.8 14.9 15.2 14.4 14.4 15.6 + 1977 17.4 18.8 20.6 22.7 24.6 26.6 29.2 33.4 38.9 45.1 51.2 55.9 + 1978 60.2 63.2 68.1 75.1 81.1 87.0 94.7 101.1 105.3 107.9 110.0 114.2 + 1979 119.9 126.8 132.2 136.6 142.4 148.0 149.9 150.3 150.6 152.6 156.9 159.0 + 1980 158.4 157.2 155.6 153.4 151.1 149.6 147.7 145.4 145.2 145.3 142.9 138.1 + 1981 135.8 137.0 138.4 138.8 138.3 137.0 135.8 136.6 138.2 137.6 134.4 133.4 + 1982 132.7 129.1 125.2 120.5 116.3 113.8 111.8 106.2 98.3 93.1 92.2 92.1 + 1983 90.3 87.9 83.7 79.4 75.3 69.0 64.1 64.4 66.5 66.7 65.3 62.7 + 1984 59.0 55.5 52.2 49.1 46.9 46.0 43.8 39.4 33.9 29.1 25.1 22.2 + 1985 21.1 20.2 19.2 19.0 19.0 18.7 18.1 17.8 18.0 18.0 17.5 16.1 + 1986 14.7 14.0 13.9 14.6 15.2 14.7 14.6 14.1 13.2 14.1 15.7 17.1 + 1987 18.3 20.2 22.6 24.8 26.8 28.7 31.3 34.8 38.8 43.1 46.2 50.6 + 1988 57.2 63.3 69.7 75.7 81.7 91.2 101.3 110.3 117.5 121.5 126.2 133.1 + 1989 137.4 140.2 144.7 148.4 151.6 153.1 153.1 152.4 151.3 152.1 152.3 148.5 + 1990 145.7 147.9 147.0 144.4 142.2 139.2 136.1 136.0 137.5 137.5 137.2 139.3 + 1991 142.8 142.8 141.9 141.8 140.8 140.5 141.6 141.9 140.2 137.2 133.7 127.6 + 1992 119.9 112.0 105.1 100.4 97.5 94.4 88.3 81.9 77.6 74.6 72.7 71.6 + 1993 69.8 67.8 65.2 62.4 58.8 55.2 53.8 51.5 47.8 44.5 40.9 38.2 + 1994 36.5 34.8 34.1 33.7 32.6 31.0 29.9 28.7 27.0 23.6 22.4 21.3 + 1995 21.3 20.1 20.7 21.3 21.3 20.1 19.0 17.8 16.1 13.8 12.6 12.1 + 1996 12.1 12.1 12.1 12.6 12.6 12.1 12.1 12.1 12.1 11.5 11.5 12.1 + 1997 12.6 13.2 14.9 17.2 20.1 22.4 24.1 25.9 27.6 29.9 31.0 32.8 + 1998 35.6 39.1 42.6 46.6 51.2 55.2 57.5 59.8 62.1 63.3 64.4 66.7 + 1999 69.6 71.9 74.2 79.4 83.4 86.3 88.0 90.3 96.1 98.9 100.1 103.0 + 2000 105.3 105.8 105.8 110.4 116.2 117.3 116.2 116.8 116.2 111.6 106.4 105.8 + 2001 105.3 104.1 105.3 109.3 113.3 114.5 117.3 120.8 120.2 118.5 116.8 116.8 2002 115.0 115.6 117.9 119.6 119.1 117.3 113.3 107.0 98.9 91.5 85.1 81.1 2003 80.5 78.8 75.9 73.6 71.3 67.9 63.8 61.0 58.1 53.5 50.0 48.9 2004 48.3 47.2 46.6 46.6 46.0 44.3 43.1 42.0 40.2 37.4 35.1 34.5 @@ -71,8 +71,8 @@ 2014 70.7 69.6 70.2 74.8 78.8 79.9 78.8 78.8 75.9 70.7 67.9 66.7 2015 67.3 65.0 63.8 62.1 61.5 58.7 56.4 54.6 51.2 46.0 40.8 38.5 2016 36.8 35.6 35.6 36.2 35.1 33.3 31.0 28.7 25.9 23.0 21.3 20.1 - 2017 19.0 18.4 18.4 18.4 18.4 17.2 16.7 15.5 13.8 12.1 10.9 10.9 - 2018 10.9 10.3 10.9 11.5 11.5 11.5 11.5 10.9 10.3 9.2 6.1 5.6 - 2019 4.4 4.9 4.0 3.9 3.6 3.9 4.1 3.8 4.0 4.2 4.4 4.6 - 2020 4.9 5.2 5.6 6.0 6.3 6.8 7.4 8.0 8.5 9.2 9.9 10.6 - 2021 11.3 12.1 12.9 13.8 14.8 15.7 16.7 17.7 18.8 19.8 21.0 22.1 + 2017 19.0 18.4 18.4 18.4 18.4 17.2 16.7 15.5 13.8 12.1 10.9 10.9 + 2018 10.9 10.3 10.9 11.5 11.5 11.5 11.5 10.9 10.3 9.2 6.1 5.6 + 2019 4.4 4.9 4.0 3.9 3.6 3.9 4.1 3.8 4.0 4.2 4.4 4.6 + 2020 4.9 5.2 5.6 6.0 6.3 6.8 7.4 8.0 8.5 9.2 9.9 10.6 + 2021 11.3 12.1 12.9 13.8 14.8 15.7 16.7 17.7 18.8 19.8 21.0 22.1 diff --git a/RMextract/pyiriplas/igrf.for b/RMextract/pyiriplas/igrf.for index 7d87da7..f3dd5ff 100644 --- a/RMextract/pyiriplas/igrf.for +++ b/RMextract/pyiriplas/igrf.for @@ -1,26 +1,26 @@ c igrf.for, version number can be found at the end of this comment. -c----------------------------------------------------------------------- +c----------------------------------------------------------------------- C -C Subroutines to compute IGRF parameters for IRI and all functions and +C Subroutines to compute IGRF parameters for IRI and all functions and C subroutines required for this computation, including: -C IGRF_SUB, IGRF_DIP, FINDB0, SHELLG, STOER, FELDG, FELDCOF, GETSHC, +C IGRF_SUB, IGRF_DIP, FINDB0, SHELLG, STOER, FELDG, FELDCOF, GETSHC, C INTERSHC, EXTRASHC, INITIZE, GEODIP, fmodip C -C CGM coordinates : GEOCGM01, OVL_ANG, CGMGLA, CGMGLO, DFR1DR, -C AZM_ANG, MLTUT, MFC, FTPRNT, GEOLOW, CORGEO, GEOCOR, SHAG, RIGHT, +C CGM coordinates : GEOCGM01, OVL_ANG, CGMGLA, CGMGLO, DFR1DR, +C AZM_ANG, MLTUT, MFC, FTPRNT, GEOLOW, CORGEO, GEOCOR, SHAG, RIGHT, C IGRF, RECALC, SPHCAR, BSPCAR, GEOMAG, MAGSM, SMGSM c- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -c Required i/o units: +c Required i/o units: c KONSOL= 6 Program messages (used when jf(12)=.true. -> konsol) c KONSOL=11 Program messages (used when jf(12)=.false. -> MESSAGES.TXT) c -c COMMON/iounit/konsol,mess is used to pass the value of KONSOL from +c COMMON/iounit/konsol,mess is used to pass the value of KONSOL from c IRISUB to IRIFUN and IGRF. If mess=false then messages are turned off. -c +c c UNIT=14 IGRF/GETSHC: IGRF coeff. (DGRF%%%%.DAT or IGRF%%%%.DAT, %%%%=year) c- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - C Corrections: -C 11/01/91 SHELLG: lowest starting point for B0 search is 2 +C 11/01/91 SHELLG: lowest starting point for B0 search is 2 C 1/27/92 Adopted to IGRF-91 coeffcients model C 2/05/92 Reduce variable names: INTER(P)SHC,EXTRA(P)SHC,INITI(ALI)ZE C 8/08/95 Updated to IGRF-45-95; new coeff. DGRF90, IGRF95, IGRF95S @@ -33,39 +33,39 @@ c 2000.01 10/28/02 replace TAB/6 blanks, enforce 72/line (D. Simpson) C 2000.02 11/08/02 change unit for coefficients to 14 C 2000.03 06/05/03 correct DIPL computation (V. Truhlik) C 2005.00 04/25/05 CALL FELDI and DO 1111 I=1,7 (Alexey Petrov) -C 2005.01 11/10/05 added igrf_dip and geodip (MLAT) +C 2005.01 11/10/05 added igrf_dip and geodip (MLAT) C 2005.02 11/10/05 FELDCOF: updated to IGRF-10 version C 2005.03 12/21/06 GH2(120) -> GH2(144) C 2007.00 05/18/07 Release of IRI-2007 -C 2007.08 07/30/09 SHELLG,STOER,FELDG,FELDCOF: NMAX=13; H/G-arrays(195) +C 2007.08 07/30/09 SHELLG,STOER,FELDG,FELDCOF: NMAX=13; H/G-arrays(195) C 2007.10 02/26/10 FELDCOF: updated to IGRF-11; DGRF05, IGRF10, IGRF10S C 2007.11 04/27/10 RECALC: updated to IGRF-11 -C 2007.11 04/27/10 Make all arrays(195) to arrays(196) +C 2007.11 04/27/10 Make all arrays(195) to arrays(196) C 2007.11 04/27/10 FELDCOF: corrected Filmod and also IGRF10.DAT C 2007.11 04/29/10 New files dgrf%%%%.asc; new GETSHC; char*12 to 13 C C 2012.00 10/05/11 IRI-2012: bottomside B0 B1 model (SHAMDB0D, SHAB1D), C 2012.00 10/05/11 bottomside Ni model (iriflip.for), auroral foE C 2012.00 10/05/11 storm model (storme_ap), Te with PF10.7 (elteik), -C 2012.00 10/05/11 oval kp model (auroral_boundary), IGRF-11(igrf.for), +C 2012.00 10/05/11 oval kp model (auroral_boundary), IGRF-11(igrf.for), C 2012.00 10/05/11 NRLMSIS00 (cira.for), CGM coordinates, F10.7 daily C 2012.00 10/05/11 81-day 365-day indices (apf107.dat), ap->kp (ckp), C 2012.00 10/05/11 array size change jf(50) outf(20,1000), oarr(100). C 2012.02 12/17/12 igrf_dip: Add magnetic declination as output parameter C 2014.01 07/20/14 igrf_dip,FTPRNT,RECALC: ASIN(x): abs(x)>1.0 x=sign(1.,x) -C 2014.02 07/24/14 COMMON/iounit: added 'mess' +C 2014.02 07/24/14 COMMON/iounit: added 'mess' C 2015.01 02/10/15 Updating to IGRF-12 (2015) C 2015.02 07/12/15 use mess,konsol in IGRF and RECALC -c----------------------------------------------------------------------- -C +c----------------------------------------------------------------------- +C subroutine igrf_sub(xlat,xlong,year,height, & xl,icode,dipl,babs) -c----------------------------------------------------------------------- +c----------------------------------------------------------------------- c INPUT: c xlat geodatic latitude in degrees c xlong geodatic longitude in degrees -c year decimal year (year+(month-0.5)/12.0-0.5 or -c year+day-of-year/365 or ../366 if leap year) +c year decimal year (year+(month-0.5)/12.0-0.5 or +c year+day-of-year/365 or ../366 if leap year) c height height in km c OUTPUT: c xl L value @@ -73,7 +73,7 @@ c icode =1 L is correct; =2 L is not correct; c =3 an approximation is used c dipl dip latitude in degrees c babs magnetic field strength in Gauss -c----------------------------------------------------------------------- +c----------------------------------------------------------------------- REAL LATI,LONGI COMMON/IGRF1/ UMR,ERA,AQUAD,BQUAD @@ -96,19 +96,19 @@ c DIPL=ATAN(0.5*TAN(DIP*UMR))/UMR c c subroutine igrf_dip(xlat,xlong,year,height,dec,dip,dipl,ymodip) -c----------------------------------------------------------------------- +c----------------------------------------------------------------------- c INPUT: c xlat geodatic latitude in degrees c xlong geodatic longitude in degrees -c year decimal year (year+month/12.0-0.5 or -c year+day-of-year/365 or ../366 if leap year) +c year decimal year (year+month/12.0-0.5 or +c year+day-of-year/365 or ../366 if leap year) c height height in km c OUTPUT: c dec magnetic declination in degrees c dip magnetic inclination (dip) in degrees c dipl dip latitude in degrees -c ymodip modified dip latitude = asin{dip/sqrt[dip^2+cos(LATI)]} -c----------------------------------------------------------------------- +c ymodip modified dip latitude = asin{dip/sqrt[dip^2+cos(LATI)]} +c----------------------------------------------------------------------- COMMON/IGRF1/ UMR,ERA,AQUAD,BQUAD C @@ -130,11 +130,11 @@ c dipdiv=DIP/SQRT(DIP*DIP+cos(XLATI*UMR)) IF(ABS(dipdiv).GT.1.) dipdiv=SIGN(1.,dipdiv) SMODIP=ASIN(dipdiv) - + c DIPL1=ATAN(0.5*TAN(DIP))/UMR DIPL=ATAN(BDOWN/2.0/sqrt(BNORTH*BNORTH+BEAST*BEAST))/umr - YMODIP=SMODIP/UMR + YMODIP=SMODIP/UMR DEC=DEC/UMR DIP=DIP/UMR RETURN @@ -143,7 +143,7 @@ c c C SHELLIG.FOR C -C 11/01/91 SHELLG: lowest starting point for B0 search is 2 +C 11/01/91 SHELLG: lowest starting point for B0 search is 2 C 1/27/92 Adopted to IGRF-91 coeffcients model C 2/05/92 Reduce variable-names: INTER(P)SHC,EXTRA(P)SHC,INITI(ALI)ZE C 8/08/95 Updated to IGRF-45-95; new coeff. DGRF90, IGRF95, IGRF95S @@ -164,18 +164,18 @@ C C C SUBROUTINE SHELLG(GLAT,GLON,ALT,DIMO,FL,ICODE,B0) -c----------------------------------------------------------------------- +c----------------------------------------------------------------------- C CALCULATES L-VALUE FOR SPECIFIED GEODAETIC COORDINATES, ALTITUDE C AND GEMAGNETIC FIELD MODEL. -C REF: G. KLUGE, EUROPEAN SPACE OPERATIONS CENTER, INTERNAL NOTE +C REF: G. KLUGE, EUROPEAN SPACE OPERATIONS CENTER, INTERNAL NOTE C NO. 67, 1970. C G. KLUGE, COMPUTER PHYSICS COMMUNICATIONS 3, 31-35, 1972 -c----------------------------------------------------------------------- +c----------------------------------------------------------------------- C CHANGES (D. BILITZA, NOV 87): C - USING CORRECT DIPOL MOMENT I.E.,DIFFERENT COMMON/MODEL/ C - USING IGRF EARTH MAGNETIC FIELD MODELS FROM 1945 TO 1990 C 09/07/22 NMAX=13 for DGRF00 and IGRF05; H/G-arrays(195) -c----------------------------------------------------------------------- +c----------------------------------------------------------------------- C INPUT: ENTRY POINT SHELLG C GLAT GEODETIC LATITUDE IN DEGREES (NORTH) C GLON GEODETIC LONGITUDE IN DEGREES (EAST) @@ -187,12 +187,12 @@ C X-AXIS POINTING TO EQUATOR AT 0 LONGITUDE C Y-AXIS POINTING TO EQUATOR AT 90 LONG. C Z-AXIS POINTING TO NORTH POLE C -C DIMO DIPOL MOMENT IN GAUSS (NORMALIZED TO EARTH RADIUS) +C DIMO DIPOL MOMENT IN GAUSS (NORMALIZED TO EARTH RADIUS) C -C COMMON +C COMMON C X(3) NOT USED C H(144) FIELD MODEL COEFFICIENTS ADJUSTED FOR SHELLG -c----------------------------------------------------------------------- +c----------------------------------------------------------------------- C OUTPUT: FL L-VALUE C ICODE =1 NORMAL COMPLETION C =2 UNPHYSICAL CONJUGATE POINT (FL MEANINGLESS) @@ -200,7 +200,7 @@ C =3 SHELL PARAMETER GREATER THAN LIMIT UP TO C WHICH ACCURATE CALCULATION IS REQUIRED; C APPROXIMATION IS USED. C B0 MAGNETIC FIELD STRENGTH IN GAUSS -c----------------------------------------------------------------------- +c----------------------------------------------------------------------- DIMENSION V(3),U(3,3),P(8,100),SP(3) COMMON/IGRF2/ X(3),H(196) COMMON/FIDB0/ SP @@ -209,60 +209,60 @@ C C-- RMIN, RMAX ARE BOUNDARIES FOR IDENTIFICATION OF ICODE=2 AND 3 C-- STEP IS STEP SIZE FOR FIELD LINE TRACING C-- STEQ IS STEP SIZE FOR INTEGRATION -C +C DATA RMIN,RMAX /0.05,1.01/ DATA STEP,STEQ /0.20,0.03/ BEQU=1.E10 C*****ENTRY POINT SHELLG TO BE USED WITH GEODETIC CO-ORDINATES RLAT=GLAT*UMR - CT=SIN(RLAT) - ST=COS(RLAT) + CT=SIN(RLAT) + ST=COS(RLAT) D=SQRT(AQUAD-(AQUAD-BQUAD)*CT*CT) X(1)=(ALT+AQUAD/D)*ST/ERA X(3)=(ALT+BQUAD/D)*CT/ERA RLON=GLON*UMR - X(2)=X(1)*SIN(RLON) - X(1)=X(1)*COS(RLON) - GOTO9 - ENTRY SHELLC(V,FL,B0) + X(2)=X(1)*SIN(RLON) + X(1)=X(1)*COS(RLON) + GOTO9 + ENTRY SHELLC(V,FL,B0) C*****ENTRY POINT SHELLC TO BE USED WITH CARTESIAN CO-ORDINATES - X(1)=V(1) - X(2)=V(2) - X(3)=V(3) -C*****CONVERT TO DIPOL-ORIENTED CO-ORDINATES - DATA U/ +0.3511737,-0.9148385,-0.1993679, - A +0.9335804,+0.3583680,+0.0000000, - B +0.0714471,-0.1861260,+0.9799247/ + X(1)=V(1) + X(2)=V(2) + X(3)=V(3) +C*****CONVERT TO DIPOL-ORIENTED CO-ORDINATES + DATA U/ +0.3511737,-0.9148385,-0.1993679, + A +0.9335804,+0.3583680,+0.0000000, + B +0.0714471,-0.1861260,+0.9799247/ 9 RQ=1./(X(1)*X(1)+X(2)*X(2)+X(3)*X(3)) - R3H=SQRT(RQ*SQRT(RQ)) - P(1,2)=(X(1)*U(1,1)+X(2)*U(2,1)+X(3)*U(3,1))*R3H - P(2,2)=(X(1)*U(1,2)+X(2)*U(2,2) )*R3H - P(3,2)=(X(1)*U(1,3)+X(2)*U(2,3)+X(3)*U(3,3))*RQ -C*****FIRST THREE POINTS OF FIELD LINE - STEP=-SIGN(STEP,P(3,2)) - CALL STOER(P(1,2),BQ2,R2) - B0=SQRT(BQ2) - P(1,3)=P(1,2)+0.5*STEP*P(4,2) - P(2,3)=P(2,2)+0.5*STEP*P(5,2) - P(3,3)=P(3,2)+0.5*STEP - CALL STOER(P(1,3),BQ3,R3) - P(1,1)=P(1,2)-STEP*(2.*P(4,2)-P(4,3)) - P(2,1)=P(2,2)-STEP*(2.*P(5,2)-P(5,3)) - P(3,1)=P(3,2)-STEP - CALL STOER(P(1,1),BQ1,R1) - P(1,3)=P(1,2)+STEP*(20.*P(4,3)-3.*P(4,2)+P(4,1))/18. - P(2,3)=P(2,2)+STEP*(20.*P(5,3)-3.*P(5,2)+P(5,1))/18. - P(3,3)=P(3,2)+STEP - CALL STOER(P(1,3),BQ3,R3) -C*****INVERT SENSE IF REQUIRED - IF(BQ3.LE.BQ1)GOTO2 - STEP=-STEP - R3=R1 - BQ3=BQ1 - DO 1 I=1,7 - ZZ=P(I,1) - P(I,1)=P(I,3) -1 P(I,3)=ZZ + R3H=SQRT(RQ*SQRT(RQ)) + P(1,2)=(X(1)*U(1,1)+X(2)*U(2,1)+X(3)*U(3,1))*R3H + P(2,2)=(X(1)*U(1,2)+X(2)*U(2,2) )*R3H + P(3,2)=(X(1)*U(1,3)+X(2)*U(2,3)+X(3)*U(3,3))*RQ +C*****FIRST THREE POINTS OF FIELD LINE + STEP=-SIGN(STEP,P(3,2)) + CALL STOER(P(1,2),BQ2,R2) + B0=SQRT(BQ2) + P(1,3)=P(1,2)+0.5*STEP*P(4,2) + P(2,3)=P(2,2)+0.5*STEP*P(5,2) + P(3,3)=P(3,2)+0.5*STEP + CALL STOER(P(1,3),BQ3,R3) + P(1,1)=P(1,2)-STEP*(2.*P(4,2)-P(4,3)) + P(2,1)=P(2,2)-STEP*(2.*P(5,2)-P(5,3)) + P(3,1)=P(3,2)-STEP + CALL STOER(P(1,1),BQ1,R1) + P(1,3)=P(1,2)+STEP*(20.*P(4,3)-3.*P(4,2)+P(4,1))/18. + P(2,3)=P(2,2)+STEP*(20.*P(5,3)-3.*P(5,2)+P(5,1))/18. + P(3,3)=P(3,2)+STEP + CALL STOER(P(1,3),BQ3,R3) +C*****INVERT SENSE IF REQUIRED + IF(BQ3.LE.BQ1)GOTO2 + STEP=-STEP + R3=R1 + BQ3=BQ1 + DO 1 I=1,7 + ZZ=P(I,1) + P(I,1)=P(I,3) +1 P(I,3)=ZZ C*****SEARCH FOR LOWEST MAGNETIC FIELD STRENGTH 2 IF(BQ1.LT.BEQU) THEN BEQU=BQ1 @@ -276,83 +276,83 @@ C*****SEARCH FOR LOWEST MAGNETIC FIELD STRENGTH BEQU=BQ3 IEQU=3 ENDIF -C*****INITIALIZATION OF INTEGRATION LOOPS +C*****INITIALIZATION OF INTEGRATION LOOPS STEP12=STEP/12. - STEP2=STEP+STEP - STEQ=SIGN(STEQ,STEP) - FI=0. - ICODE=1 - ORADIK=0. - OTERM=0. - STP=R2*STEQ - Z=P(3,2)+STP + STEP2=STEP+STEP + STEQ=SIGN(STEQ,STEP) + FI=0. + ICODE=1 + ORADIK=0. + OTERM=0. + STP=R2*STEQ + Z=P(3,2)+STP STP=STP/0.75 - P(8,1)=STEP2*(P(1,1)*P(4,1)+P(2,1)*P(5,1)) + P(8,1)=STEP2*(P(1,1)*P(4,1)+P(2,1)*P(5,1)) P(8,2)=STEP2*(P(1,2)*P(4,2)+P(2,2)*P(5,2)) -C*****MAIN LOOP (FIELD LINE TRACING) - DO 3 N=3,3333 -C*****CORRECTOR (FIELD LINE TRACING) - P(1,N)=P(1,N-1)+STEP12*(5.*P(4,N)+8.*P(4,N-1)-P(4,N-2)) - P(2,N)=P(2,N-1)+STEP12*(5.*P(5,N)+8.*P(5,N-1)-P(5,N-2)) -C*****PREPARE EXPANSION COEFFICIENTS FOR INTERPOLATION -C*****OF SLOWLY VARYING QUANTITIES - P(8,N)=STEP2*(P(1,N)*P(4,N)+P(2,N)*P(5,N)) - C0=P(1,N-1)**2+P(2,N-1)**2 - C1=P(8,N-1) - C2=(P(8,N)-P(8,N-2))*0.25 +C*****MAIN LOOP (FIELD LINE TRACING) + DO 3 N=3,3333 +C*****CORRECTOR (FIELD LINE TRACING) + P(1,N)=P(1,N-1)+STEP12*(5.*P(4,N)+8.*P(4,N-1)-P(4,N-2)) + P(2,N)=P(2,N-1)+STEP12*(5.*P(5,N)+8.*P(5,N-1)-P(5,N-2)) +C*****PREPARE EXPANSION COEFFICIENTS FOR INTERPOLATION +C*****OF SLOWLY VARYING QUANTITIES + P(8,N)=STEP2*(P(1,N)*P(4,N)+P(2,N)*P(5,N)) + C0=P(1,N-1)**2+P(2,N-1)**2 + C1=P(8,N-1) + C2=(P(8,N)-P(8,N-2))*0.25 C3=(P(8,N)+P(8,N-2)-C1-C1)/6.0 - D0=P(6,N-1) + D0=P(6,N-1) D1=(P(6,N)-P(6,N-2))*0.5 - D2=(P(6,N)+P(6,N-2)-D0-D0)*0.5 + D2=(P(6,N)+P(6,N-2)-D0-D0)*0.5 E0=P(7,N-1) - E1=(P(7,N)-P(7,N-2))*0.5 - E2=(P(7,N)+P(7,N-2)-E0-E0)*0.5 -C*****INNER LOOP (FOR QUADRATURE) -4 T=(Z-P(3,N-1))/STEP - IF(T.GT.1.)GOTO5 - HLI=0.5*(((C3*T+C2)*T+C1)*T+C0) + E1=(P(7,N)-P(7,N-2))*0.5 + E2=(P(7,N)+P(7,N-2)-E0-E0)*0.5 +C*****INNER LOOP (FOR QUADRATURE) +4 T=(Z-P(3,N-1))/STEP + IF(T.GT.1.)GOTO5 + HLI=0.5*(((C3*T+C2)*T+C1)*T+C0) ZQ=Z*Z R=HLI+SQRT(HLI*HLI+ZQ) - IF(R.LE.RMIN)GOTO30 + IF(R.LE.RMIN)GOTO30 RQ=R*R - FF=SQRT(1.+3.*ZQ/RQ) - RADIK=B0-((D2*T+D1)*T+D0)*R*RQ*FF - IF(R-RMAX)44,44,45 -45 ICODE=2 - RADIK=RADIK-12.*(R-RMAX)**2 + FF=SQRT(1.+3.*ZQ/RQ) + RADIK=B0-((D2*T+D1)*T+D0)*R*RQ*FF + IF(R-RMAX)44,44,45 +45 ICODE=2 + RADIK=RADIK-12.*(R-RMAX)**2 44 IF(RADIK+RADIK.LE.ORADIK) GOTO 10 - TERM=SQRT(RADIK)*FF*((E2*T+E1)*T+E0)/(RQ+ZQ) - FI=FI+STP*(OTERM+TERM) - ORADIK=RADIK - OTERM=TERM - STP=R*STEQ - Z=Z+STP - GOTO4 -C*****PREDICTOR (FIELD LINE TRACING) -5 P(1,N+1)=P(1,N)+STEP12*(23.*P(4,N)-16.*P(4,N-1)+5.*P(4,N-2)) - P(2,N+1)=P(2,N)+STEP12*(23.*P(5,N)-16.*P(5,N-1)+5.*P(5,N-2)) - P(3,N+1)=P(3,N)+STEP - CALL STOER(P(1,N+1),BQ3,R3) + TERM=SQRT(RADIK)*FF*((E2*T+E1)*T+E0)/(RQ+ZQ) + FI=FI+STP*(OTERM+TERM) + ORADIK=RADIK + OTERM=TERM + STP=R*STEQ + Z=Z+STP + GOTO4 +C*****PREDICTOR (FIELD LINE TRACING) +5 P(1,N+1)=P(1,N)+STEP12*(23.*P(4,N)-16.*P(4,N-1)+5.*P(4,N-2)) + P(2,N+1)=P(2,N)+STEP12*(23.*P(5,N)-16.*P(5,N-1)+5.*P(5,N-2)) + P(3,N+1)=P(3,N)+STEP + CALL STOER(P(1,N+1),BQ3,R3) C*****SEARCH FOR LOWEST MAGNETIC FIELD STRENGTH IF(BQ3.LT.BEQU) THEN IEQU=N+1 BEQU=BQ3 ENDIF 3 CONTINUE -10 IF(IEQU.lt.2) IEQU=2 +10 IF(IEQU.lt.2) IEQU=2 SP(1)=P(1,IEQU-1) SP(2)=P(2,IEQU-1) SP(3)=P(3,IEQU-1) - IF(ORADIK.LT.1E-15)GOTO11 - FI=FI+STP/0.75*OTERM*ORADIK/(ORADIK-RADIK) + IF(ORADIK.LT.1E-15)GOTO11 + FI=FI+STP/0.75*OTERM*ORADIK/(ORADIK-RADIK) C C-- The minimal allowable value of FI was changed from 1E-15 to 1E-12, C-- because 1E-38 is the minimal allowable arg. for ALOG in our envir. C-- D. Bilitza, Nov 87. C -11 FI=0.5*ABS(FI)/SQRT(B0)+1E-12 +11 FI=0.5*ABS(FI)/SQRT(B0)+1E-12 C -C*****COMPUTE L FROM B AND I. SAME AS CARMEL IN INVAR. +C*****COMPUTE L FROM B AND I. SAME AS CARMEL IN INVAR. C C-- Correct dipole moment is used here. D. Bilitza, Nov 87. C @@ -362,44 +362,44 @@ C c arg = FI*FI*FI/DIMOB0 c if(abs(arg).gt.88.0) arg=88.0 XX=3*arg1-arg2 - IF(XX.GT.23.0) GOTO 776 - IF(XX.GT.11.7) GOTO 775 - IF(XX.GT.+3.0) GOTO 774 - IF(XX.GT.-3.0) GOTO 773 - IF(XX.GT.-22.) GOTO 772 - 771 GG=3.33338E-1*XX+3.0062102E-1 - GOTO777 - 772 GG=((((((((-8.1537735E-14*XX+8.3232531E-13)*XX+1.0066362E-9)*XX+ - & 8.1048663E-8)*XX+3.2916354E-6)*XX+8.2711096E-5)*XX+ + IF(XX.GT.23.0) GOTO 776 + IF(XX.GT.11.7) GOTO 775 + IF(XX.GT.+3.0) GOTO 774 + IF(XX.GT.-3.0) GOTO 773 + IF(XX.GT.-22.) GOTO 772 + 771 GG=3.33338E-1*XX+3.0062102E-1 + GOTO777 + 772 GG=((((((((-8.1537735E-14*XX+8.3232531E-13)*XX+1.0066362E-9)*XX+ + & 8.1048663E-8)*XX+3.2916354E-6)*XX+8.2711096E-5)*XX+ & 1.3714667E-3)*XX+1.5017245E-2)*XX+4.3432642E-1)*XX+ - & 6.2337691E-1 - GOTO777 - 773 GG=((((((((2.6047023E-10*XX+2.3028767E-9)*XX-2.1997983E-8)*XX- - & 5.3977642E-7)*XX-3.3408822E-6)*XX+3.8379917E-5)*XX+ + & 6.2337691E-1 + GOTO777 + 773 GG=((((((((2.6047023E-10*XX+2.3028767E-9)*XX-2.1997983E-8)*XX- + & 5.3977642E-7)*XX-3.3408822E-6)*XX+3.8379917E-5)*XX+ & 1.1784234E-3)*XX+1.4492441E-2)*XX+4.3352788E-1)*XX+ - & 6.228644E-1 - GOTO777 - 774 GG=((((((((6.3271665E-10*XX-3.958306E-8)*XX+9.9766148E-07)*XX- - & 1.2531932E-5)*XX+7.9451313E-5)*XX-3.2077032E-4)*XX+ + & 6.228644E-1 + GOTO777 + 774 GG=((((((((6.3271665E-10*XX-3.958306E-8)*XX+9.9766148E-07)*XX- + & 1.2531932E-5)*XX+7.9451313E-5)*XX-3.2077032E-4)*XX+ & 2.1680398E-3)*XX+1.2817956E-2)*XX+4.3510529E-1)*XX+ - & 6.222355E-1 - GOTO777 + & 6.222355E-1 + GOTO777 775 GG=(((((2.8212095E-8*XX-3.8049276E-6)*XX+2.170224E-4)*XX- & 6.7310339E-3)*XX+1.2038224E-1)*XX-1.8461796E-1)*XX+ - & 2.0007187E0 - GOTO777 - 776 GG=XX-3.0460681E0 + & 2.0007187E0 + GOTO777 + 776 GG=XX-3.0460681E0 777 FL=EXP(ALOG((1.+EXP(GG))*DIMOB0)/3.0) - RETURN -C*****APPROXIMATION FOR HIGH VALUES OF L. -30 ICODE=3 - T=-P(3,N-1)/STEP - FL=1./(ABS(((C3*T+C2)*T+C1)*T+C0)+1E-15) - RETURN - END + RETURN +C*****APPROXIMATION FOR HIGH VALUES OF L. +30 ICODE=3 + T=-P(3,N-1)/STEP + FL=1./(ABS(((C3*T+C2)*T+C1)*T+C0)+1E-15) + RETURN + END C C - SUBROUTINE STOER(P,BQ,R) + SUBROUTINE STOER(P,BQ,R) C******************************************************************* C* SUBROUTINE USED FOR FIELD LINE TRACING IN SHELLG * C* CALLS ENTRY POINT FELDI IN GEOMAGNETIC FIELD SUBROUTINE FELDG * @@ -408,55 +408,55 @@ C 09/07/22 NMAX=13 for DGRF00 and IGRF05; H/G-arrays(195) C******************************************************************* DIMENSION P(7),U(3,3) COMMON/IGRF2/ XI(3),H(196) -C*****XM,YM,ZM ARE GEOMAGNETIC CARTESIAN INVERSE CO-ORDINATES - ZM=P(3) +C*****XM,YM,ZM ARE GEOMAGNETIC CARTESIAN INVERSE CO-ORDINATES + ZM=P(3) FLI=P(1)*P(1)+P(2)*P(2)+1E-15 R=0.5*(FLI+SQRT(FLI*FLI+(ZM+ZM)**2)) RQ=R*R - WR=SQRT(R) - XM=P(1)*WR - YM=P(2)*WR -C*****TRANSFORM TO GEOGRAPHIC CO-ORDINATE SYSTEM - DATA U/ +0.3511737,-0.9148385,-0.1993679, - A +0.9335804,+0.3583680,+0.0000000, - B +0.0714471,-0.1861260,+0.9799247/ - XI(1)=XM*U(1,1)+YM*U(1,2)+ZM*U(1,3) - XI(2)=XM*U(2,1)+YM*U(2,2)+ZM*U(2,3) - XI(3)=XM*U(3,1) +ZM*U(3,3) -C*****COMPUTE DERIVATIVES -c CALL FELDI(XI,H) + WR=SQRT(R) + XM=P(1)*WR + YM=P(2)*WR +C*****TRANSFORM TO GEOGRAPHIC CO-ORDINATE SYSTEM + DATA U/ +0.3511737,-0.9148385,-0.1993679, + A +0.9335804,+0.3583680,+0.0000000, + B +0.0714471,-0.1861260,+0.9799247/ + XI(1)=XM*U(1,1)+YM*U(1,2)+ZM*U(1,3) + XI(2)=XM*U(2,1)+YM*U(2,2)+ZM*U(2,3) + XI(3)=XM*U(3,1) +ZM*U(3,3) +C*****COMPUTE DERIVATIVES +c CALL FELDI(XI,H) CALL FELDI - Q=H(1)/RQ - DX=H(3)+H(3)+Q*XI(1) - DY=H(4)+H(4)+Q*XI(2) - DZ=H(2)+H(2)+Q*XI(3) -C*****TRANSFORM BACK TO GEOMAGNETIC CO-ORDINATE SYSTEM - DXM=U(1,1)*DX+U(2,1)*DY+U(3,1)*DZ - DYM=U(1,2)*DX+U(2,2)*DY - DZM=U(1,3)*DX+U(2,3)*DY+U(3,3)*DZ - DR=(XM*DXM+YM*DYM+ZM*DZM)/R -C*****FORM SLOWLY VARYING EXPRESSIONS - P(4)=(WR*DXM-0.5*P(1)*DR)/(R*DZM) - P(5)=(WR*DYM-0.5*P(2)*DR)/(R*DZM) + Q=H(1)/RQ + DX=H(3)+H(3)+Q*XI(1) + DY=H(4)+H(4)+Q*XI(2) + DZ=H(2)+H(2)+Q*XI(3) +C*****TRANSFORM BACK TO GEOMAGNETIC CO-ORDINATE SYSTEM + DXM=U(1,1)*DX+U(2,1)*DY+U(3,1)*DZ + DYM=U(1,2)*DX+U(2,2)*DY + DZM=U(1,3)*DX+U(2,3)*DY+U(3,3)*DZ + DR=(XM*DXM+YM*DYM+ZM*DZM)/R +C*****FORM SLOWLY VARYING EXPRESSIONS + P(4)=(WR*DXM-0.5*P(1)*DR)/(R*DZM) + P(5)=(WR*DYM-0.5*P(2)*DR)/(R*DZM) DSQ=RQ*(DXM*DXM+DYM*DYM+DZM*DZM) BQ=DSQ*RQ*RQ - P(6)=SQRT(DSQ/(RQ+3.*ZM*ZM)) - P(7)=P(6)*(RQ+ZM*ZM)/(RQ*DZM) - RETURN - END + P(6)=SQRT(DSQ/(RQ+3.*ZM*ZM)) + P(7)=P(6)*(RQ+ZM*ZM)/(RQ*DZM) + RETURN + END C C - SUBROUTINE FELDG(GLAT,GLON,ALT,BNORTH,BEAST,BDOWN,BABS) -c----------------------------------------------------------------------- + SUBROUTINE FELDG(GLAT,GLON,ALT,BNORTH,BEAST,BDOWN,BABS) +c----------------------------------------------------------------------- C CALCULATES EARTH MAGNETIC FIELD FROM SPHERICAL HARMONICS MODEL -C REF: G. KLUGE, EUROPEAN SPACE OPERATIONS CENTRE, INTERNAL NOTE 61, +C REF: G. KLUGE, EUROPEAN SPACE OPERATIONS CENTRE, INTERNAL NOTE 61, C 1970. -c----------------------------------------------------------------------- +c----------------------------------------------------------------------- C CHANGES (D. BILITZA, NOV 87): C - FIELD COEFFICIENTS IN BINARY DATA FILES INSTEAD OF BLOCK DATA C - CALCULATES DIPOL MOMENT C 09/07/22 NMAX=13 for DGRF00 and IGRF05; H/G-arrays(195) -c----------------------------------------------------------------------- +c----------------------------------------------------------------------- C INPUT: ENTRY POINT FELDG C GLAT GEODETIC LATITUDE IN DEGREES (NORTH) C GLON GEODETIC LONGITUDE IN DEGREES (EAST) @@ -470,149 +470,149 @@ C Z-AXIS POINTING TO NORTH POLE C C COMMON BLANK AND ENTRY POINT FELDI ARE NEEDED WHEN USED C IN CONNECTION WITH L-CALCULATION PROGRAM SHELLG. -C +C C COMMON /MODEL/ AND /IGRF1/ C UMR = ATAN(1.0)*4./180. *UMR= -C ERA EARTH RADIUS FOR NORMALIZATION OF CARTESIAN +C ERA EARTH RADIUS FOR NORMALIZATION OF CARTESIAN C COORDINATES (6371.2 KM) -C AQUAD, BQUAD SQUARE OF MAJOR AND MINOR HALF AXIS OF -C EARTH ELLIPSOID AS RECOMMENDED BY INTERNAT. +C AQUAD, BQUAD SQUARE OF MAJOR AND MINOR HALF AXIS OF +C EARTH ELLIPSOID AS RECOMMENDED BY INTERNAT. C ASTRONOMICAL UNION (6378.160, 6356.775 KM). C NMAX MAXIMUM ORDER OF SPHERICAL HARMONICS -C TIME YEAR (DECIMAL: 1973.5) FOR WHICH MAGNETIC +C TIME YEAR (DECIMAL: 1973.5) FOR WHICH MAGNETIC C FIELD IS TO BE CALCULATED C G(M) NORMALIZED FIELD COEFFICIENTS (SEE FELDCOF) C M=NMAX*(NMAX+2) -c----------------------------------------------------------------------- +c----------------------------------------------------------------------- C OUTPUT: BABS MAGNETIC FIELD STRENGTH IN GAUSS C BNORTH, BEAST, BDOWN COMPONENTS OF THE FIELD WITH RESPECT C TO THE LOCAL GEODETIC COORDINATE SYSTEM, WITH AXIS C POINTING IN THE TANGENTIAL PLANE TO THE NORTH, EAST -C AND DOWNWARD. +C AND DOWNWARD. C----------------------------------------------------------------------- - DIMENSION V(3),B(3) + DIMENSION V(3),B(3) CHARACTER*13 NAME COMMON/IGRF2/ XI(3),H(196) - COMMON/MODEL/ NMAX,TIME,G(196),NAME + COMMON/MODEL/ NMAX,TIME,G(196),NAME COMMON/IGRF1/ UMR,ERA,AQUAD,BQUAD C C-- IS RECORDS ENTRY POINT C -C*****ENTRY POINT FELDG TO BE USED WITH GEODETIC CO-ORDINATES - IS=1 +C*****ENTRY POINT FELDG TO BE USED WITH GEODETIC CO-ORDINATES + IS=1 RLAT=GLAT*UMR - CT=SIN(RLAT) - ST=COS(RLAT) - D=SQRT(AQUAD-(AQUAD-BQUAD)*CT*CT) + CT=SIN(RLAT) + ST=COS(RLAT) + D=SQRT(AQUAD-(AQUAD-BQUAD)*CT*CT) RLON=GLON*UMR - CP=COS(RLON) - SP=SIN(RLON) + CP=COS(RLON) + SP=SIN(RLON) ZZZ=(ALT+BQUAD/D)*CT/ERA RHO=(ALT+AQUAD/D)*ST/ERA - XXX=RHO*CP - YYY=RHO*SP - GOTO 10 - -C*****ENTRY POINT FELDC TO BE USED WITH CARTESIAN CO-ORDINATES - ENTRY FELDC(V,B) - IS=2 - XXX=V(1) - YYY=V(2) - ZZZ=V(3) -10 RQ=1./(XXX*XXX+YYY*YYY+ZZZ*ZZZ) - XI(1)=XXX*RQ - XI(2)=YYY*RQ - XI(3)=ZZZ*RQ - GOTO 20 - -C*****ENTRY POINT FELDI USED FOR L COMPUTATION - ENTRY FELDI - IS=3 -20 IHMAX=NMAX*NMAX+1 - LAST=IHMAX+NMAX+NMAX - IMAX=NMAX+NMAX-1 - DO 8 I=IHMAX,LAST -8 H(I)=G(I) - DO 6 K=1,3,2 - I=IMAX - IH=IHMAX -1 IL=IH-I - F=2./FLOAT(I-K+2) - X=XI(1)*F - Y=XI(2)*F - Z=XI(3)*(F+F) - I=I-2 + XXX=RHO*CP + YYY=RHO*SP + GOTO 10 + +C*****ENTRY POINT FELDC TO BE USED WITH CARTESIAN CO-ORDINATES + ENTRY FELDC(V,B) + IS=2 + XXX=V(1) + YYY=V(2) + ZZZ=V(3) +10 RQ=1./(XXX*XXX+YYY*YYY+ZZZ*ZZZ) + XI(1)=XXX*RQ + XI(2)=YYY*RQ + XI(3)=ZZZ*RQ + GOTO 20 + +C*****ENTRY POINT FELDI USED FOR L COMPUTATION + ENTRY FELDI + IS=3 +20 IHMAX=NMAX*NMAX+1 + LAST=IHMAX+NMAX+NMAX + IMAX=NMAX+NMAX-1 + DO 8 I=IHMAX,LAST +8 H(I)=G(I) + DO 6 K=1,3,2 + I=IMAX + IH=IHMAX +1 IL=IH-I + F=2./FLOAT(I-K+2) + X=XI(1)*F + Y=XI(2)*F + Z=XI(3)*(F+F) + I=I-2 IF(I-1) 5,4,2 - -2 DO 3 M=3,I,2 - H(IL+M+1)=G(IL+M+1)+Z*H(IH+M+1)+X*(H(IH+M+3)- - A H(IH+M-1))-Y*(H(IH+M+2)+H(IH+M-2)) -3 H(IL+M)=G(IL+M)+Z*H(IH+M)+X*(H(IH+M+2)- + +2 DO 3 M=3,I,2 + H(IL+M+1)=G(IL+M+1)+Z*H(IH+M+1)+X*(H(IH+M+3)- + A H(IH+M-1))-Y*(H(IH+M+2)+H(IH+M-2)) +3 H(IL+M)=G(IL+M)+Z*H(IH+M)+X*(H(IH+M+2)- A H(IH+M-2))+Y*(H(IH+M+3)+H(IH+M-1)) - -4 H(IL+2)=G(IL+2)+Z*H(IH+2)+X*H(IH+4)-Y*(H(IH+3)+H(IH)) - H(IL+1)=G(IL+1)+Z*H(IH+1)+Y*H(IH+4)+X*(H(IH+3)-H(IH)) -5 H(IL)=G(IL)+Z*H(IH)+2.*(X*H(IH+1)+Y*H(IH+2)) - IH=IL - IF(I.GE.K) GOTO 1 + +4 H(IL+2)=G(IL+2)+Z*H(IH+2)+X*H(IH+4)-Y*(H(IH+3)+H(IH)) + H(IL+1)=G(IL+1)+Z*H(IH+1)+Y*H(IH+4)+X*(H(IH+3)-H(IH)) +5 H(IL)=G(IL)+Z*H(IH)+2.*(X*H(IH+1)+Y*H(IH+2)) + IH=IL + IF(I.GE.K) GOTO 1 6 CONTINUE - - IF(IS.EQ.3) RETURN - - S=.5*H(1)+2.*(H(2)*XI(3)+H(3)*XI(1)+H(4)*XI(2)) - T=(RQ+RQ)*SQRT(RQ) - BXXX=T*(H(3)-S*XXX) - BYYY=T*(H(4)-S*YYY) - BZZZ=T*(H(2)-S*ZZZ) - - IF(IS.EQ.2) GOTO 7 + + IF(IS.EQ.3) RETURN + + S=.5*H(1)+2.*(H(2)*XI(3)+H(3)*XI(1)+H(4)*XI(2)) + T=(RQ+RQ)*SQRT(RQ) + BXXX=T*(H(3)-S*XXX) + BYYY=T*(H(4)-S*YYY) + BZZZ=T*(H(2)-S*ZZZ) + + IF(IS.EQ.2) GOTO 7 BABS=SQRT(BXXX*BXXX+BYYY*BYYY+BZZZ*BZZZ) - BEAST=BYYY*CP-BXXX*SP - BRHO=BYYY*SP+BXXX*CP - BNORTH=BZZZ*ST-BRHO*CT - BDOWN=-BZZZ*CT-BRHO*ST - RETURN - -7 B(1)=BXXX - B(2)=BYYY - B(3)=BZZZ - RETURN - END + BEAST=BYYY*CP-BXXX*SP + BRHO=BYYY*SP+BXXX*CP + BNORTH=BZZZ*ST-BRHO*CT + BDOWN=-BZZZ*CT-BRHO*ST + RETURN + +7 B(1)=BXXX + B(2)=BYYY + B(3)=BZZZ + RETURN + END C C SUBROUTINE FELDCOF(YEAR,DIMO) -c----------------------------------------------------------------------- +c----------------------------------------------------------------------- C DETERMINES COEFFICIENTS AND DIPOL MOMENT FROM IGRF MODELS C C INPUT: YEAR DECIMAL YEAR FOR WHICH GEOMAGNETIC FIELD IS TO C BE CALCULATED -C OUTPUT: DIMO GEOMAGNETIC DIPOL MOMENT IN GAUSS (NORMALIZED +C OUTPUT: DIMO GEOMAGNETIC DIPOL MOMENT IN GAUSS (NORMALIZED C TO EARTH'S RADIUS) AT THE TIME (YEAR) -C 05/31/2000 updated to IGRF-2000 version (###) -C 03/24/2000 updated to IGRF-2005 version (###) +C 05/31/2000 updated to IGRF-2000 version (###) +C 03/24/2000 updated to IGRF-2005 version (###) C 07/22/2009 NMAX=13 for DGRF00 and IGRF05; H/G-arrays(195) -C 02/26/2010 update to IGRF-11 (2010) (###) +C 02/26/2010 update to IGRF-11 (2010) (###) C 10/05/2011 added COMMON/DIPOL/ for MLT computation in DPMTRX (IRIFUN) C 02/10/2015 update to IGRF-12 (2015) (###) -c----------------------------------------------------------------------- - CHARACTER*13 FILMOD, FIL1, FIL2 +c----------------------------------------------------------------------- + CHARACTER*13 FILMOD, FIL1, FIL2 C ### FILMOD, DTEMOD array-size is number of IGRF maps DIMENSION GH1(196),GH2(196),GHA(196),FILMOD(17) DIMENSION DTEMOD(17) - DOUBLE PRECISION X,F0,F + DOUBLE PRECISION X,F0,F COMMON/MODEL/ NMAX,TIME,GH1,FIL1 COMMON/IGRF1/ UMR,ERAD,AQUAD,BQUAD COMMON/DIPOL/ GHI1,GHI2,GHI3 C ### updated coefficient file names and corresponding years - DATA FILMOD / 'dgrf1945.dat','dgrf1950.dat','dgrf1955.dat', + DATA FILMOD / 'dgrf1945.dat','dgrf1950.dat','dgrf1955.dat', 1 'dgrf1960.dat','dgrf1965.dat','dgrf1970.dat','dgrf1975.dat', 2 'dgrf1980.dat','dgrf1985.dat','dgrf1990.dat','dgrf1995.dat', 3 'dgrf2000.dat','dgrf2005.dat','dgrf2010.dat','dgrf2015.dat', 4 'igrf2020.dat','igrf2020s.dat'/ - DATA DTEMOD / 1945., 1950., 1955., 1960., 1965., + DATA DTEMOD / 1945., 1950., 1955., 1960., 1965., 1 1970., 1975., 1980., 1985., 1990., 1995., 2000.,2005., - 2 2010., 2015., 2020.,2025./ + 2 2010., 2015., 2020.,2025./ C C ### numye is number of IGRF coefficient files minus 1 C @@ -628,24 +628,24 @@ C-- DETERMINE IGRF-YEARS FOR INPUT-YEAR IYEA = INT(YEAR/5.)*5 L = (IYEA - 1945)/5 + 1 IF(L.LT.1) L=1 - IF(L.GT.NUMYE) L=NUMYE - DTE1 = DTEMOD(L) - FIL1 = FILMOD(L) - DTE2 = DTEMOD(L+1) - FIL2 = FILMOD(L+1) + IF(L.GT.NUMYE) L=NUMYE + DTE1 = DTEMOD(L) + FIL1 = FILMOD(L) + DTE2 = DTEMOD(L+1) + FIL2 = FILMOD(L+1) C-- GET IGRF COEFFICIENTS FOR THE BOUNDARY YEARS - CALL GETSHC (IU, FIL1, NMAX1, ERAD, GH1, IER) - IF (IER .NE. 0) STOP - CALL GETSHC (IU, FIL2, NMAX2, ERAD, GH2, IER) + CALL GETSHC (IU, FIL1, NMAX1, ERAD, GH1, IER) + IF (IER .NE. 0) STOP + CALL GETSHC (IU, FIL2, NMAX2, ERAD, GH2, IER) IF (IER .NE. 0) STOP C-- DETERMINE IGRF COEFFICIENTS FOR YEAR - IF (L .LE. NUMYE-1) THEN - CALL INTERSHC (YEAR, DTE1, NMAX1, GH1, DTE2, - 1 NMAX2, GH2, NMAX, GHA) - ELSE - CALL EXTRASHC (YEAR, DTE1, NMAX1, GH1, NMAX2, - 1 GH2, NMAX, GHA) - ENDIF + IF (L .LE. NUMYE-1) THEN + CALL INTERSHC (YEAR, DTE1, NMAX1, GH1, DTE2, + 1 NMAX2, GH2, NMAX, GHA) + ELSE + CALL EXTRASHC (YEAR, DTE1, NMAX1, GH1, NMAX2, + 1 GH2, NMAX, GHA) + ENDIF C-- DETERMINE MAGNETIC DIPOL MOMENT AND COEFFIECIENTS G F0=0.D0 DO 1234 J=1,3 @@ -653,219 +653,219 @@ C-- DETERMINE MAGNETIC DIPOL MOMENT AND COEFFIECIENTS G F0 = F0 + F * F 1234 CONTINUE DIMO = DSQRT(F0) - GHI1=GHA(1) - GHI2=GHA(2) + GHI1=GHA(1) + GHI2=GHA(2) GHI3=GHA(3) GH1(1) = 0.0 - I=2 - F0=1.D-5 - IF(IS.EQ.0) F0=-F0 - SQRT2=SQRT(2.) + I=2 + F0=1.D-5 + IF(IS.EQ.0) F0=-F0 + SQRT2=SQRT(2.) - DO 9 N=1,NMAX + DO 9 N=1,NMAX X = N - F0 = F0 * X * X / (4.D0 * X - 2.D0) + F0 = F0 * X * X / (4.D0 * X - 2.D0) IF(IS.EQ.0) F0 = F0 * (2.D0 * X - 1.D0) / X - F = F0 * 0.5D0 + F = F0 * 0.5D0 IF(IS.EQ.0) F = F * SQRT2 GH1(I) = GHA(I-1) * F0 - I = I+1 - DO 9 M=1,N - F = F * (X + M) / (X - M + 1.D0) - IF(IS.EQ.0) F = F * DSQRT((X - M + 1.D0) / (X + M)) + I = I+1 + DO 9 M=1,N + F = F * (X + M) / (X - M + 1.D0) + IF(IS.EQ.0) F = F * DSQRT((X - M + 1.D0) / (X + M)) GH1(I) = GHA(I-1) * F GH1(I+1) = GHA(I) * F I=I+2 -9 CONTINUE +9 CONTINUE RETURN END C C - SUBROUTINE GETSHC (IU, FSPEC, NMAX, ERAD, GH, IER) -C =============================================================== -C Reads spherical harmonic coefficients from the specified -C file into an array. -C Input: -C IU - Logical unit number -C FSPEC - File specification -C Output: -C NMAX - Maximum degree and order of model -C ERAD - Earth's radius associated with the spherical -C harmonic coefficients, in the same units as -C elevation -C GH - Schmidt quasi-normal internal spherical -C harmonic coefficients -C IER - Error number: = 0, no error -C = -2, records out of order -C = FORTRAN run-time error number -C =============================================================== - - CHARACTER FSPEC*(*), FOUT*80 + SUBROUTINE GETSHC (IU, FSPEC, NMAX, ERAD, GH, IER) +C =============================================================== +C Reads spherical harmonic coefficients from the specified +C file into an array. +C Input: +C IU - Logical unit number +C FSPEC - File specification +C Output: +C NMAX - Maximum degree and order of model +C ERAD - Earth's radius associated with the spherical +C harmonic coefficients, in the same units as +C elevation +C GH - Schmidt quasi-normal internal spherical +C harmonic coefficients +C IER - Error number: = 0, no error +C = -2, records out of order +C = FORTRAN run-time error number +C =============================================================== + + CHARACTER FSPEC*(*), FOUT*80 DIMENSION GH(196) - LOGICAL mess - COMMON/iounit/konsol,mess + LOGICAL mess + COMMON/iounit/konsol,mess COMMON /path/datapath character datapath*200 - do 1 j=1,196 + do 1 j=1,196 1 GH(j)=0.0 -C --------------------------------------------------------------- -C Open coefficient file. Read past first header record. -C Read degree and order of model and Earth's radius. -C --------------------------------------------------------------- +C --------------------------------------------------------------- +C Open coefficient file. Read past first header record. +C Read degree and order of model and Earth's radius. +C --------------------------------------------------------------- WRITE(FOUT,667) FSPEC 667 FORMAT(A13) c-web-for webversion c 667 FORMAT('/var/www/omniweb/cgi/vitmo/IRI/',A13) OPEN (IU, FILE=TRIM(ADJUSTL(DATAPATH))//FOUT, STATUS='OLD', - & IOSTAT=IER, ERR=999) - READ (IU, *, IOSTAT=IER, ERR=999) - READ (IU, *, IOSTAT=IER, ERR=999) NMAX, ERAD, XMYEAR - nm=nmax*(nmax+2) - READ (IU, *, IOSTAT=IER, ERR=999) (GH(i),i=1,nm) - goto 888 - + & IOSTAT=IER, ERR=999) + READ (IU, *, IOSTAT=IER, ERR=999) + READ (IU, *, IOSTAT=IER, ERR=999) NMAX, ERAD, XMYEAR + nm=nmax*(nmax+2) + READ (IU, *, IOSTAT=IER, ERR=999) (GH(i),i=1,nm) + goto 888 + 999 if (mess) write(konsol,100) FOUT 100 FORMAT('Error while reading ',A13) -888 CLOSE (IU) - RETURN - END -C -C - SUBROUTINE INTERSHC (DATE, DTE1, NMAX1, GH1, DTE2, - 1 NMAX2, GH2, NMAX, GH) - -C =============================================================== -C -C Version 1.01 -C -C Interpolates linearly, in time, between two spherical -C harmonic models. -C -C Input: -C DATE - Date of resulting model (in decimal year) -C DTE1 - Date of earlier model -C NMAX1 - Maximum degree and order of earlier model -C GH1 - Schmidt quasi-normal internal spherical -C harmonic coefficients of earlier model -C DTE2 - Date of later model -C NMAX2 - Maximum degree and order of later model -C GH2 - Schmidt quasi-normal internal spherical -C harmonic coefficients of later model -C -C Output: -C GH - Coefficients of resulting model -C NMAX - Maximum degree and order of resulting model -C -C A. Zunde -C USGS, MS 964, Box 25046 Federal Center, Denver, CO 80225 -C -C =============================================================== - - DIMENSION GH1(*), GH2(*), GH(*) - -C --------------------------------------------------------------- -C The coefficients (GH) of the resulting model, at date -C DATE, are computed by linearly interpolating between the -C coefficients of the earlier model (GH1), at date DTE1, -C and those of the later model (GH2), at date DTE2. If one -C model is smaller than the other, the interpolation is -C performed with the missing coefficients assumed to be 0. -C --------------------------------------------------------------- - - FACTOR = (DATE - DTE1) / (DTE2 - DTE1) - - IF (NMAX1 .EQ. NMAX2) THEN - K = NMAX1 * (NMAX1 + 2) - NMAX = NMAX1 - ELSE IF (NMAX1 .GT. NMAX2) THEN - K = NMAX2 * (NMAX2 + 2) - L = NMAX1 * (NMAX1 + 2) - DO 1122 I = K + 1, L -1122 GH(I) = GH1(I) + FACTOR * (-GH1(I)) - NMAX = NMAX1 - ELSE - K = NMAX1 * (NMAX1 + 2) - L = NMAX2 * (NMAX2 + 2) - DO 1133 I = K + 1, L -1133 GH(I) = FACTOR * GH2(I) - NMAX = NMAX2 - ENDIF - - DO 1144 I = 1, K -1144 GH(I) = GH1(I) + FACTOR * (GH2(I) - GH1(I)) - - RETURN - END -C -C - SUBROUTINE EXTRASHC (DATE, DTE1, NMAX1, GH1, NMAX2, - 1 GH2, NMAX, GH) - -C =============================================================== -C -C Version 1.01 -C -C Extrapolates linearly a spherical harmonic model with a -C rate-of-change model. -C -C Input: -C DATE - Date of resulting model (in decimal year) -C DTE1 - Date of base model -C NMAX1 - Maximum degree and order of base model -C GH1 - Schmidt quasi-normal internal spherical -C harmonic coefficients of base model -C NMAX2 - Maximum degree and order of rate-of-change -C model -C GH2 - Schmidt quasi-normal internal spherical -C harmonic coefficients of rate-of-change model -C -C Output: -C GH - Coefficients of resulting model -C NMAX - Maximum degree and order of resulting model -C -C A. Zunde -C USGS, MS 964, Box 25046 Federal Center, Denver, CO 80225 -C -C =============================================================== - - DIMENSION GH1(*), GH2(*), GH(*) - -C --------------------------------------------------------------- -C The coefficients (GH) of the resulting model, at date -C DATE, are computed by linearly extrapolating the coef- -C ficients of the base model (GH1), at date DTE1, using -C those of the rate-of-change model (GH2), at date DTE2. If -C one model is smaller than the other, the extrapolation is -C performed with the missing coefficients assumed to be 0. -C --------------------------------------------------------------- - - FACTOR = (DATE - DTE1) - - IF (NMAX1 .EQ. NMAX2) THEN - K = NMAX1 * (NMAX1 + 2) - NMAX = NMAX1 - ELSE IF (NMAX1 .GT. NMAX2) THEN - K = NMAX2 * (NMAX2 + 2) - L = NMAX1 * (NMAX1 + 2) - DO 1155 I = K + 1, L -1155 GH(I) = GH1(I) - NMAX = NMAX1 - ELSE - K = NMAX1 * (NMAX1 + 2) - L = NMAX2 * (NMAX2 + 2) - DO 1166 I = K + 1, L -1166 GH(I) = FACTOR * GH2(I) - NMAX = NMAX2 - ENDIF - - DO 1177 I = 1, K -1177 GH(I) = GH1(I) + FACTOR * GH2(I) - - RETURN - END +888 CLOSE (IU) + RETURN + END +C +C + SUBROUTINE INTERSHC (DATE, DTE1, NMAX1, GH1, DTE2, + 1 NMAX2, GH2, NMAX, GH) + +C =============================================================== +C +C Version 1.01 +C +C Interpolates linearly, in time, between two spherical +C harmonic models. +C +C Input: +C DATE - Date of resulting model (in decimal year) +C DTE1 - Date of earlier model +C NMAX1 - Maximum degree and order of earlier model +C GH1 - Schmidt quasi-normal internal spherical +C harmonic coefficients of earlier model +C DTE2 - Date of later model +C NMAX2 - Maximum degree and order of later model +C GH2 - Schmidt quasi-normal internal spherical +C harmonic coefficients of later model +C +C Output: +C GH - Coefficients of resulting model +C NMAX - Maximum degree and order of resulting model +C +C A. Zunde +C USGS, MS 964, Box 25046 Federal Center, Denver, CO 80225 +C +C =============================================================== + + DIMENSION GH1(*), GH2(*), GH(*) + +C --------------------------------------------------------------- +C The coefficients (GH) of the resulting model, at date +C DATE, are computed by linearly interpolating between the +C coefficients of the earlier model (GH1), at date DTE1, +C and those of the later model (GH2), at date DTE2. If one +C model is smaller than the other, the interpolation is +C performed with the missing coefficients assumed to be 0. +C --------------------------------------------------------------- + + FACTOR = (DATE - DTE1) / (DTE2 - DTE1) + + IF (NMAX1 .EQ. NMAX2) THEN + K = NMAX1 * (NMAX1 + 2) + NMAX = NMAX1 + ELSE IF (NMAX1 .GT. NMAX2) THEN + K = NMAX2 * (NMAX2 + 2) + L = NMAX1 * (NMAX1 + 2) + DO 1122 I = K + 1, L +1122 GH(I) = GH1(I) + FACTOR * (-GH1(I)) + NMAX = NMAX1 + ELSE + K = NMAX1 * (NMAX1 + 2) + L = NMAX2 * (NMAX2 + 2) + DO 1133 I = K + 1, L +1133 GH(I) = FACTOR * GH2(I) + NMAX = NMAX2 + ENDIF + + DO 1144 I = 1, K +1144 GH(I) = GH1(I) + FACTOR * (GH2(I) - GH1(I)) + + RETURN + END +C +C + SUBROUTINE EXTRASHC (DATE, DTE1, NMAX1, GH1, NMAX2, + 1 GH2, NMAX, GH) + +C =============================================================== +C +C Version 1.01 +C +C Extrapolates linearly a spherical harmonic model with a +C rate-of-change model. +C +C Input: +C DATE - Date of resulting model (in decimal year) +C DTE1 - Date of base model +C NMAX1 - Maximum degree and order of base model +C GH1 - Schmidt quasi-normal internal spherical +C harmonic coefficients of base model +C NMAX2 - Maximum degree and order of rate-of-change +C model +C GH2 - Schmidt quasi-normal internal spherical +C harmonic coefficients of rate-of-change model +C +C Output: +C GH - Coefficients of resulting model +C NMAX - Maximum degree and order of resulting model +C +C A. Zunde +C USGS, MS 964, Box 25046 Federal Center, Denver, CO 80225 +C +C =============================================================== + + DIMENSION GH1(*), GH2(*), GH(*) + +C --------------------------------------------------------------- +C The coefficients (GH) of the resulting model, at date +C DATE, are computed by linearly extrapolating the coef- +C ficients of the base model (GH1), at date DTE1, using +C those of the rate-of-change model (GH2), at date DTE2. If +C one model is smaller than the other, the extrapolation is +C performed with the missing coefficients assumed to be 0. +C --------------------------------------------------------------- + + FACTOR = (DATE - DTE1) + + IF (NMAX1 .EQ. NMAX2) THEN + K = NMAX1 * (NMAX1 + 2) + NMAX = NMAX1 + ELSE IF (NMAX1 .GT. NMAX2) THEN + K = NMAX2 * (NMAX2 + 2) + L = NMAX1 * (NMAX1 + 2) + DO 1155 I = K + 1, L +1155 GH(I) = GH1(I) + NMAX = NMAX1 + ELSE + K = NMAX1 * (NMAX1 + 2) + L = NMAX2 * (NMAX2 + 2) + DO 1166 I = K + 1, L +1166 GH(I) = FACTOR * GH2(I) + NMAX = NMAX2 + ENDIF + + DO 1177 I = 1, K +1177 GH(I) = GH1(I) + FACTOR * GH2(I) + + RETURN + END C C SUBROUTINE INITIZE @@ -873,14 +873,14 @@ C---------------------------------------------------------------- C Initializes the parameters in COMMON/IGRF1/ C C UMR = ATAN(1.0)*4./180. *UMR= -C ERA EARTH RADIUS FOR NORMALIZATION OF CARTESIAN -C COORDINATES (6371.2 KM) +C ERA EARTH RADIUS FOR NORMALIZATION OF CARTESIAN +C COORDINATES (6371.2 KM) C EREQU MAJOR HALF AXIS FOR EARTH ELLIPSOID (6378.160 KM) C ERPOL MINOR HALF AXIS FOR EARTH ELLIPSOID (6356.775 KM) C AQUAD SQUARE OF MAJOR HALF AXIS FOR EARTH ELLIPSOID C BQUAD SQUARE OF MINOR HALF AXIS FOR EARTH ELLIPSOID C -C ERA, EREQU and ERPOL as recommended by the INTERNATIONAL +C ERA, EREQU and ERPOL as recommended by the INTERNATIONAL C ASTRONOMICAL UNION . C----------------------------------------------------------------- COMMON/IGRF1/ UMR,ERA,AQUAD,BQUAD @@ -905,9 +905,9 @@ C OUTPUT: DLA,DLO SLA,SLO C Last revision: November 2005 (Vladimir Papitashvili) C The code is modifed from GEOCOR written by V.Popov and V.Papitashvili -C in mid-1980s. +C in mid-1980s. - COMMON /CONST/UMR + COMMON /CONST/UMR C Earth's radius (km) RE = 6371.2 @@ -916,7 +916,7 @@ C RH = (RE + HI)/RE R = 1. if(j.gt.0) goto 1234 - + COL = (90.- SLA)*UMR RLO = SLO*UMR CALL SPHCAR(R,COL,RLO,X,Y,Z,1) @@ -927,7 +927,7 @@ C RH = (RE + HI)/RE DCO = TH/UMR DLA = 90.- DCO RETURN - + 1234 continue COL = (90.- DLA)*UMR RLO = DLO*UMR @@ -942,12 +942,12 @@ C RH = (RE + HI)/RE RETURN END -C -C +C +C function fmodip(xlat) - + common/findRLAT/xlong,year - + call igrf_dip(xlat,xlong,year,300.,dec,dip,dipl,ymodip) fmodip=ymodip @@ -959,7 +959,7 @@ C C ********************************************************************* C Version 2011 for GEO-CGM.FOR (good through 2015) January 2011 C Version 2005 for GEO-CGM.FOR (good through 2010) November 2005 -C Nov 11, 2005 IGRF and RECALC are is modified to the IGRF-10 model +C Nov 11, 2005 IGRF and RECALC are is modified to the IGRF-10 model C and extended back to 1900 using the DGRF coeffcients C Apr 11, 2001 GEOLOW is modified to account for interpolation of C CGM meridians near equator across the 360/0 boundary @@ -969,7 +969,7 @@ C NASA/Goddard Space Flight Center, Greenbelt, Maryland) C Vladimir O. Papitashvili (IZMIRAN, Moscow, Russia, now at SPRL, C University of Michigan, Ann Arbor) C Conributions from Boris A. Belov and Vladimir A. Popov (both at -C IZMIRAN), Therese Moretto (DMI, DSRI, now at NSF), Freddy +C IZMIRAN), Therese Moretto (DMI, DSRI, now at NSF), Freddy C Christiansen (DMI, DSRI), and Scott Boardsen (NASA/GSFC). C The original version of this code is described in the brochure by @@ -1420,12 +1420,12 @@ C ********************************************************************** PARAMETER (CON=1.4,CON2=CON*CON,BIG=1.E30,NTAB=10,SAFE=2.) EXTERNAL func - COMMON/iounit/konsol,mess + COMMON/iounit/konsol,mess INTEGER i,j REAL errt,fac,hh,a(NTAB,NTAB) if(h.eq.0.) then - if (mess) write(konsol,100) + if (mess) write(konsol,100) 100 FORMAT('h must be nonzero in dfridr') return endif @@ -2442,9 +2442,9 @@ C ********************************************************************* * H1990(66),H1995(66),H2000(66),H2005(66),H2010(66) logical mess - + common /iounit/konsol,mess - + DATA G1900/ * 0., -31543., -2298., -677., 2905., 924., 1022., * -1469., 1256., 572., 876., 628., 660., -361., @@ -3002,11 +3002,11 @@ C ********************************************************************* * 72.8, 68.6, 76.0, -141.4, -22.9, 13.1, -77.9, * 80.4, -75.0, -4.7, 45.3, 14.0, 10.4, 1.6, * 4.9, 24.3, 8.2, -14.5, -5.7, -19.3, 11.6, - * 10.9, -14.1, -3.7, 5.4, 9.4, 3.4, -5.3, + * 10.9, -14.1, -3.7, 5.4, 9.4, 3.4, -5.3, * 3.1, -12.4, -0.8, 8.4, -8.4, -10.1, -2.0, * -6.3, 0.9, -1.1, -0.2, 2.5, -0.3, 2.2, * 3.1, -1.0, -2.8/ - + DATA H2010/ * 0.0, 0.0, 4945.1, 0.0, -2707.7, -575.4, 0.0, @@ -3025,7 +3025,7 @@ C ********************************************************************* * 0.0, 11.4, 16.7, -11.3, -3.9, 2.7, 1.3, * -3.9, -2.9, -8.1, -1.4, 2.0, -8.9, 4.4, * -2.3, -0.5, 0.5, -1.5, -0.7, 1.3, 1.4, - * -0.3, -0.3, -0.3, 1.9, -1.6, -0.2, 1.8, + * -0.3, -0.3, -0.3, 1.9, -1.6, -0.2, 1.8, * 0.2, -0.1, -0.6, 1.4, 0.3, 0.1, -0.8, * 0.4, -0.1, 0.1, -0.5, 0.3, -0.3, 0.3, * 0.2, -0.5, 0.2/ @@ -3097,7 +3097,7 @@ C 40 CONTINUE GOTO 300 -C INTERPOLATE BETWEEN YEARS +C INTERPOLATE BETWEEN YEARS C INTERPOLATE BETWEEN 1900 - 1905: 1900 F2=(IYR-1900)/5. @@ -3107,7 +3107,7 @@ C INTERPOLATE BETWEEN 1900 - 1905: H(N)=H1900(N)*F1+H1905(N)*F2 ENDDO GOTO 300 - + C INTERPOLATE BETWEEN 1905 - 1910: 1905 F2=(IYR-1905)/5. F1=1.-F2 @@ -3116,7 +3116,7 @@ C INTERPOLATE BETWEEN 1905 - 1910: H(N)=H1905(N)*F1+H1910(N)*F2 ENDDO GOTO 300 - + C INTERPOLATE BETWEEN 1910 - 1915: 1910 F2=(IYR-1910)/5. F1=1.-F2 @@ -3125,7 +3125,7 @@ C INTERPOLATE BETWEEN 1910 - 1915: H(N)=H1910(N)*F1+H1915(N)*F2 ENDDO GOTO 300 - + C INTERPOLATE BETWEEN 1915 - 1920: 1915 F2=(IYR-1915)/5. F1=1.-F2 @@ -3134,7 +3134,7 @@ C INTERPOLATE BETWEEN 1915 - 1920: H(N)=H1915(N)*F1+H1920(N)*F2 ENDDO GOTO 300 - + C INTERPOLATE BETWEEN 1920 - 1925: 1920 F2=(IYR-1920)/5. F1=1.-F2 @@ -3143,7 +3143,7 @@ C INTERPOLATE BETWEEN 1920 - 1925: H(N)=H1920(N)*F1+H1925(N)*F2 ENDDO GOTO 300 - + C INTERPOLATE BETWEEN 1925 - 1930: 1925 F2=(IYR-1925)/5. F1=1.-F2 @@ -3152,7 +3152,7 @@ C INTERPOLATE BETWEEN 1925 - 1930: H(N)=H1925(N)*F1+H1930(N)*F2 ENDDO GOTO 300 - + C INTERPOLATE BETWEEN 1930 - 1935: 1930 F2=(IYR-1930)/5. F1=1.-F2 @@ -3161,7 +3161,7 @@ C INTERPOLATE BETWEEN 1930 - 1935: H(N)=H1930(N)*F1+H1935(N)*F2 ENDDO GOTO 300 - + C INTERPOLATE BETWEEN 1935 - 1940: 1935 F2=(IYR-1935)/5. F1=1.-F2 @@ -3170,7 +3170,7 @@ C INTERPOLATE BETWEEN 1935 - 1940: H(N)=H1935(N)*F1+H1940(N)*F2 ENDDO GOTO 300 - + C INTERPOLATE BETWEEN 1940 - 1945: 1940 F2=(IYR-1940)/5. F1=1.-F2 @@ -3179,7 +3179,7 @@ C INTERPOLATE BETWEEN 1940 - 1945: H(N)=H1940(N)*F1+H1945(N)*F2 ENDDO GOTO 300 - + C INTERPOLATE BETWEEN 1945 - 1950: 1945 F2=(IYR-1945)/5. F1=1.-F2 @@ -3188,7 +3188,7 @@ C INTERPOLATE BETWEEN 1945 - 1950: H(N)=H1945(N)*F1+H1950(N)*F2 ENDDO GOTO 300 - + C INTERPOLATE BETWEEN 1950 - 1955: 1950 F2=(IYR-1950)/5. F1=1.-F2 @@ -3197,7 +3197,7 @@ C INTERPOLATE BETWEEN 1950 - 1955: H(N)=H1950(N)*F1+H1955(N)*F2 ENDDO GOTO 300 - + C INTERPOLATE BETWEEN 1955 - 1960: 1955 F2=(IYR-1955)/5. F1=1.-F2 @@ -3206,7 +3206,7 @@ C INTERPOLATE BETWEEN 1955 - 1960: H(N)=H1955(N)*F1+H1960(N)*F2 ENDDO GOTO 300 - + C INTERPOLATE BETWEEN 1960 - 1965: 1960 F2=(IYR-1960)/5. F1=1.-F2 @@ -3215,7 +3215,7 @@ C INTERPOLATE BETWEEN 1960 - 1965: H(N)=H1960(N)*F1+H1965(N)*F2 ENDDO GOTO 300 - + C INTERPOLATE BETWEEN 1965 - 1970: 1965 F2=(IYR-1965)/5. F1=1.-F2 @@ -3224,7 +3224,7 @@ C INTERPOLATE BETWEEN 1965 - 1970: H(N)=H1965(N)*F1+H1970(N)*F2 ENDDO GOTO 300 - + C INTERPOLATE BETWEEN 1970 - 1975: 1970 F2=(IYR-1970)/5. F1=1.-F2 @@ -3233,7 +3233,7 @@ C INTERPOLATE BETWEEN 1970 - 1975: H(N)=H1970(N)*F1+H1975(N)*F2 ENDDO GOTO 300 - + C INTERPOLATE BETWEEN 1975 - 1980: 1975 F2=(IYR-1975)/5. F1=1.-F2 @@ -3242,7 +3242,7 @@ C INTERPOLATE BETWEEN 1975 - 1980: H(N)=H1975(N)*F1+H1980(N)*F2 ENDDO GOTO 300 - + C INTERPOLATE BETWEEN 1980 - 1985: 1980 F2=(IYR-1980)/5. F1=1.-F2 @@ -3251,7 +3251,7 @@ C INTERPOLATE BETWEEN 1980 - 1985: H(N)=H1980(N)*F1+H1985(N)*F2 ENDDO GOTO 300 - + C INTERPOLATE BETWEEN 1985 - 1990: 1985 F2=(IYR-1985)/5. F1=1.-F2 @@ -3260,7 +3260,7 @@ C INTERPOLATE BETWEEN 1985 - 1990: H(N)=H1985(N)*F1+H1990(N)*F2 ENDDO GOTO 300 - + C INTERPOLATE BETWEEN 1990 - 1995: 1990 F2=(IYR-1990)/5. F1=1.-F2 @@ -3269,7 +3269,7 @@ C INTERPOLATE BETWEEN 1990 - 1995: H(N)=H1990(N)*F1+H1995(N)*F2 ENDDO GOTO 300 - + C INTERPOLATE BETWEEN 1995 - 2000: 1995 F2=(IYR-1995)/5. F1=1.-F2 @@ -3278,7 +3278,7 @@ C INTERPOLATE BETWEEN 1995 - 2000: H(N)=H1995(N)*F1+H2000(N)*F2 ENDDO GOTO 300 - + C INTERPOLATE BETWEEN 2000 - 2005: 2000 F2=(IYR-2000)/5. F1=1.-F2 @@ -3421,7 +3421,7 @@ C from 1945 (updated by V. Papitashvili, February 1995) C C Modified to accept years up to 2005 (V. Papitashvili, January 2001) C -C Modified to accept years from 1900 through 2010 using the DGRF & +C Modified to accept years from 1900 through 2010 using the DGRF & C IGRF-10 coeficients (updated by V. Papitashvili, November 2005) C C Modified to accept years up to 2015 (V. Papitashvili, January 2011) @@ -3450,8 +3450,8 @@ C ********************************************************************* COMMON/C1/ ST0,CT0,SL0,CL0,CTCL,STCL,CTSL,STSL,SFI,CFI,SPS,CPS, * SHI,CHI,HI,PSI,XMUT,A11,A21,A31,A12,A22,A32,A13,A23,A33,DS3, * K,IY,BA - - common/iounit/konsol,mess + + common/iounit/konsol,mess DATA IYE,IDE/2*0/ IF (IYR.EQ.IYE.AND.IDAY.EQ.IDE) GOTO 5 @@ -3941,4 +3941,3 @@ C ********************************************************************* RETURN END - diff --git a/RMextract/pyiriplas/igrf2010.dat b/RMextract/pyiriplas/igrf2010.dat index 0d321f9..006f71c 100644 --- a/RMextract/pyiriplas/igrf2010.dat +++ b/RMextract/pyiriplas/igrf2010.dat @@ -1,4 +1,4 @@ - igrf2010 + igrf2010 13 6371.2 2010.0 -29496.5 -1585.9 diff --git a/RMextract/pyiriplas/igrf2010s.dat b/RMextract/pyiriplas/igrf2010s.dat index ce835eb..476aac5 100644 --- a/RMextract/pyiriplas/igrf2010s.dat +++ b/RMextract/pyiriplas/igrf2010s.dat @@ -1,4 +1,4 @@ - igrf2010s + igrf2010s 8 6371.2 2015.0 11.4 16.7 @@ -79,4 +79,4 @@ -0.5 0.4 0.2 -0.4 +0.4 diff --git a/RMextract/pyiriplas/igrf2015.dat b/RMextract/pyiriplas/igrf2015.dat index a0532f9..0c78f33 100644 --- a/RMextract/pyiriplas/igrf2015.dat +++ b/RMextract/pyiriplas/igrf2015.dat @@ -1,4 +1,4 @@ - igrf2015 + igrf2015 13 6371.2 2015.0 -29442.0 -1501.0 diff --git a/RMextract/pyiriplas/igrf2015s.dat b/RMextract/pyiriplas/igrf2015s.dat index b9c0609..9a5579c 100644 --- a/RMextract/pyiriplas/igrf2015s.dat +++ b/RMextract/pyiriplas/igrf2015s.dat @@ -1,4 +1,4 @@ - igrf2015s + igrf2015s 8 6371.2 2020.0 10.3 18.1 diff --git a/RMextract/pyiriplas/igrf2020.dat b/RMextract/pyiriplas/igrf2020.dat index 9314b32..8829730 100644 --- a/RMextract/pyiriplas/igrf2020.dat +++ b/RMextract/pyiriplas/igrf2020.dat @@ -1,4 +1,4 @@ - igrf2020 + igrf2020 13 6371.2 2015.0 -29404.8 -1450.9 diff --git a/RMextract/pyiriplas/igrf2020s.dat b/RMextract/pyiriplas/igrf2020s.dat index 2c10302..0da086e 100644 --- a/RMextract/pyiriplas/igrf2020s.dat +++ b/RMextract/pyiriplas/igrf2020s.dat @@ -1,4 +1,4 @@ - igrf2020s + igrf2020s 8 6371.2 2020.0 5.7 7.4 diff --git a/RMextract/pyiriplas/indx2017.for b/RMextract/pyiriplas/indx2017.for index ea0f204..808ec89 100644 --- a/RMextract/pyiriplas/indx2017.for +++ b/RMextract/pyiriplas/indx2017.for @@ -1,23 +1,23 @@ -C INDEX SUBROUTINES:___INDX2017.FOR___T.L.Gulyaeva___May. 2017 +C INDEX SUBROUTINES:___INDX2017.FOR___T.L.Gulyaeva___May. 2017 C -C INDEX SUBROUTINES:___INDX2015c.FOR___T.L.Gulyaeva___Feb. 2016 +C INDEX SUBROUTINES:___INDX2015c.FOR___T.L.Gulyaeva___Feb. 2016 C -C INDEX SUBROUTINES:___INDX2015.FOR___T.L.Gulyaeva___Dec. 2014 +C INDEX SUBROUTINES:___INDX2015.FOR___T.L.Gulyaeva___Dec. 2014 C C == AMENDMENTS ...................................Dec. 2014 C STORM RELATED SUBROUTINE FROM IRI2001: = = APF == is replaced C by: == SUBAPF == which enters geomagnetic Kp and Ap 3-h indices C and solar daily Rz and F107 indices from standard = kpYEAR = file -C for given 'YEAR' and preceding 'YEAR-1' for calculations of 81-days +C for given 'YEAR' and preceding 'YEAR-1' for calculations of 81-days C indices R81 and F81 instead of former APRZ.DAT file (cancelled input) C -C INDEX SUBROUTINES:___INDX2014.FOR___T.L.Gulyaeva___Apr. 2014 +C INDEX SUBROUTINES:___INDX2014.FOR___T.L.Gulyaeva___Apr. 2014 C -C INDEX SUBROUTINES:___INDX2013.FOR___T.L.Gulyaeva___Dec. 2013 +C INDEX SUBROUTINES:___INDX2013.FOR___T.L.Gulyaeva___Dec. 2013 C -C INDEX SUBROUTINES:___INDX2011.FOR___T.L.Gulyaeva___Dec. 2011 +C INDEX SUBROUTINES:___INDX2011.FOR___T.L.Gulyaeva___Dec. 2011 C -C INDEX SUBROUTINES:___INDX2007.FOR___T.L.Gulyaeva___June 2009 +C INDEX SUBROUTINES:___INDX2007.FOR___T.L.Gulyaeva___June 2009 C C ******************* ISO_IRI_SMI PROJECT ******************* C @@ -52,14 +52,14 @@ C == F81=COV81-subroutine produces daily F10.7 (Covington) solar C == radio flux index averaged for 81 days preceding given day C == R81=Rz81-subroutine produces daily sunspot number Rz C == averaged for 81 days preceding given day -C************************************************************** -C************************************************************** +C************************************************************** +C************************************************************** C -C********** INTERNATIONAL REFERENCE IONOSPHERE **************** -C**********RUSSIAN STANDARD MODEL OF IONOSPHERE**************** +C********** INTERNATIONAL REFERENCE IONOSPHERE **************** +C**********RUSSIAN STANDARD MODEL OF IONOSPHERE**************** C**************** FUNCTIONS,SUBROUTINES ********************* C************************************************************** -C** initialize: INITIALIZE (needs to be called before using +C** initialize: INITIALIZE (needs to be called before using C** subroutines or functions) C** NE: XE1,ZERO,DXE1N,XE2,XE3_1,XE4_1,XE5,XE6,XE_1 C** TE/TI: ELTEIK,SPHARM_IK,TEBA,SPHARM,ELTE,TEDE,TI,TEDER, @@ -77,9 +77,9 @@ C** LAY: XE2TO5,XEN,VALGUL,ROGUL,LNGLSN,LSKNM,INILAY C** INDICES: TCON,TCONGEC, SUBAPF,GKPM C** Storm: LSTID,STORM, SUBAPF,GKPM C** ion drift: vdrift -C************************************************************** -C -C************************************************************** +C************************************************************** +C +C************************************************************** C*** -------------------ADDRESSES------------------------ *** C*** I PROF. K. RAWER DR. D. BILITZA I *** C*** I HERRENSTR. 43 GSFC CODE 933 I *** @@ -92,24 +92,24 @@ C*** I TROITSK, MOSCOW I *** C*** I RUSSIA I *** C*** I gulyaeva@izmiran.ru I *** C*** ---------------------------------------------------- *** -C************************************************************** +C************************************************************** C C SUBROUTINE GKPM(IAS,DKP,RKP) -C +C C T.L. Gulyaeva, Dec. 2013: C New: put real kp instead of Kpm calculation: C C T.L. Gulyaeva, Sep. 2001: C =================================================================== C calculates geomagnetic 3h kp-index, dkp(13), and Kpm index, rkp, -C used by the plasmasphere model -C for given year, month, day and UT hour using ap-indices +C used by the plasmasphere model +C for given year, month, day and UT hour using ap-indices C collected by APF-subroutine in the array ias(13). -C The ap-indices are transformed to kp-indices with conventional +C The ap-indices are transformed to kp-indices with conventional C thresholds for ap - kp . -C Kpm presents forecast of kp-index 3h in advance based on accumulation -C of instantaneous kp-indices for 12 preceding hours ranked by +C Kpm presents forecast of kp-index 3h in advance based on accumulation +C of instantaneous kp-indices for 12 preceding hours ranked by C decreasing order. C C Ref. T.L. Gulyaeva, G. De Franceschi, and L. Perrone. 'Electron @@ -149,7 +149,7 @@ C K1=13 K1=8 DO N=1,4 NK=K1+N - X1(N)=DKP(NK) + X1(N)=DKP(NK) X2(N)=0.0 ENDDO MM=0 @@ -160,7 +160,7 @@ C rank 4 preceding 3h kp-indices by decreasing order C find naximum of 4 preceding 3h kp-indices (XM) XM=0.0 DO N=1,4 - IF (XM.LT.X1(N)) THEN + IF (XM.LT.X1(N)) THEN XM=X1(N) ENDIF ENDDO @@ -170,8 +170,8 @@ C find naximum of 4 preceding 3h kp-indices (XM) C ranking 4 preceding kp by decreasing order DO N=1,4 IF (X1(N).LT.XM) GOTO 830 - MM=MM+1 - X2(MM)=XM + MM=MM+1 + X2(MM)=XM X1(N)=0.0 830 CONTINUE ENDDO @@ -184,46 +184,46 @@ C RKP=RKP*0.35 870 RETURN END -C************************************************************** +C************************************************************** C C subroutine initialize dimension indap(13),akp(13) - COMMON /CONST/UMR,PI/ARGEXP/ARGMAX + COMMON /CONST/UMR,PI/ARGEXP/ARGMAX & /const1/humr,dumr,xfap,indap,akp,cov,rzs ARGMAX=88.0 pi=atan(1.0)*4. UMR=pi/180. humr=pi/12. dumr = pi / 182.5 - return + return end -C -C************************************************************* -CC +C +C************************************************************* +CC SUBROUTINE SUBAPF(IYYYY,IMN,IDY,HOUR,IAP,F81,R81) CC------------------------------------------------------------------- -CC T.L. Gulyaeva........................................May. 2017 +CC T.L. Gulyaeva........................................May. 2017 C -CC Source: former IRI-Plas subroutine: +CC Source: former IRI-Plas subroutine: CC SUBROUTINE APF(IYYYY,IMN,ID,HOUR,IAP,F81,R81) -CC Modified to produce sunspot number R81, and solar radio flux F81 +CC Modified to produce sunspot number R81, and solar radio flux F81 CC from two successive kpYEAR annual files -CC Input: -CC kpYEAR (preceding year: IYYYY-1) -CC kpYEAR (given year: IYYYY) +CC Input: +CC kpYEAR (preceding year: IYYYY-1) +CC kpYEAR (given year: IYYYY) c-------------------------------------------------------------------- c D. Bilitza .......................................... May, 2001. c c finds Ap indices for IRI-storm for given year IYYYY (yyyy), month c (IMN) and day (ID) and UT hour (HOUR decimal hours). The indices are c stored in IAP(13). IAP(13) is ap index for UT=hour. Intervals are UT: -c (0-3),(3-6),(6-9),(9-12),(12-15),(15-18),(18-21),(21-24). -c -c T.L. Gulyaeva ...................................... Sep. 2001. +c (0-3),(3-6),(6-9),(9-12),(12-15),(15-18),(18-21),(21-24). +c +c T.L. Gulyaeva ...................................... Sep. 2001. c Modified for producing solar radio flux F10.7, F81, averaged for c 81 days preceeding given day -C +C C------------------------------------------------------------------------ DIMENSION iap(13),iap0(8),iap1(8),iap2(8),iapt(24),lm(12) &,icv(82),irz(82),icurkp(0:7),iprekp(0:7) @@ -234,7 +234,7 @@ C------------------------------------------------------------------------ COMMON /path/datapath character datapath*200 C -C START: +C START: ipcnt=0 ! keep cnt -82,...,-1 do i=1,8 @@ -278,7 +278,7 @@ C ipre=1 ! Include data for preceding year endif C - infilekp='kpYEAR' + infilekp='kpYEAR' C 10 FORMAT(3I2,6X,8(I2),3X,8(I3),7X,I3,I3,1X,I1) @@ -289,12 +289,12 @@ C if (ipre.eq.0) GOTO 203 !avoid input of preceding year file kpYEAR>>>>> C C------------------------------------------------------------------------------- -C Include Input file 'kpYEAR' for preceding year +C Include Input file 'kpYEAR' for preceding year C infilekp(3:6)=YEAR_pre !!! Tamara OPEN(13,FILE=TRIM(ADJUSTL(DATAPATH))//infilekp,STATUS='OLD', - & ERR=21) + & ERR=21) 201 continue do jj=1,8 iap2(jj)=iap1(jj) @@ -319,7 +319,7 @@ C Move data 1 line up: enddo GOTO 201 202 close(unit=13) - ipcnt=81-ldaend ! + ipcnt=81-ldaend ! C C For current year: 203 infilekp(3:6)=YEAR ! @@ -328,8 +328,8 @@ C C C Read file kpyear for current year: C - 204 continue - do jj=1,8 + 204 continue + do jj=1,8 iprekp(jj-1)=icurkp(jj-1) iap2(jj)=iap1(jj) iap1(jj)=iap0(jj) @@ -354,14 +354,14 @@ C if (ipcnt.lt.81) goto 204 - IF ((JYR.eq.IYR).and.(JMN.eq.IMN).and.(JDY.eq.idend)) then + IF ((JYR.eq.IYR).and.(JMN.eq.IMN).and.(JDY.eq.idend)) then goto 207 ELSE ipcnt=ipcnt-1 goto 204 ENDIF -C data for 81 preceding days are collected +C data for 81 preceding days are collected 207 F81=0.0 R81=0.0 icnv=0 @@ -396,7 +396,7 @@ C & ' STORM model is turned off.') IAP(1)=-iap(1) goto 30 - 29 write(*,*) 'Error in input k-index file',infilekp + 29 write(*,*) 'Error in input k-index file',infilekp C pause ' ' stop 30 CLOSE(unit=13) @@ -427,7 +427,7 @@ C NEW++++++++++++++++++++ do 1234 i=1,nmn-1 1234 mosum=mosum+im(i) endif - ndoy=mosum+ndy + ndoy=mosum+ndy END FUNCTION C ----------------------------------------------------------- subroutine blet2(jlet,alet2) @@ -445,17 +445,17 @@ C integer*2 ilet alet2(1:1)=IN(i) endif enddo - 7 do i=0,9 + 7 do i=0,9 if (j1.eq.i) then alet2(2:2)=IN(i) endif - enddo + enddo return end C-------------------------------------------------------------------------------- C subroutine blet3(ilet,alet3) -c nn=1,2,3,4 +c nn=1,2,3,4 CHARACTER*1 IN(0:9) DATA IN/'0','1','2','3','4','5','6','7','8','9'/ @@ -474,17 +474,17 @@ C alet3(2:2)=IN(i) endif enddo - 7 do i=0,9 + 7 do i=0,9 if (j1.eq.i) then alet3(3:3)=IN(i) endif - enddo + enddo return end C C--------------------------------------------------------------- subroutine blet4(ilet,alet4) -c nn=1,2,3,4 +c nn=1,2,3,4 INTEGER ilet CHARACTER*4 alet4 CHARACTER*1 IN(0:9) @@ -510,19 +510,19 @@ C alet4(3:3)=IN(i) endif enddo - 7 do i=0,9 + 7 do i=0,9 if (j1.eq.i) then alet4(4:4)=IN(i) endif - enddo + enddo return end C =============================================================== c SUBROUTINE STORM(ap,rga,rgo,coor,rgma,ut,doy,cf,rap) C E.A. Araujo-Pradere and T.J. Fuller-Rowell .............May, 2001 -C -C Refs. +C +C Refs. C (i) T.J.Fuller-Rowell, M.V.Codrescu, and E.A.Araujo-Pradere, C Capturing the storm-time ionospheric response in an empirical C model. AGU Geophys. Monograph, 125, 393-401, 2001. @@ -555,7 +555,7 @@ C to scale foF2, foF2 * cf. C rap ---> integrated ap-index used for producing storm factor cf C DIMENSIONS AND COEFFICIENTS VALUES -cc- COMMON +cc- COMMON cc- & /CONST1/HUMR,DUMR,XFAP,INDAP,AKP,COV,RZS DIMENSION c4(20) DATA c4/0.00E+00,0.00E+00,0.00E+00,0.00E+00,0.00E+00,0.00E+00, @@ -766,40 +766,40 @@ c INTERPOLATION C T.L. Gulyaeva ............................................ ........ 2007 C -C New subroutine TOP05 to correct Topside IRI-Bent model using +C New subroutine TOP05 to correct Topside IRI-Bent model using C QF-factor obtained from h05top height at Ne=0.5*NmF2, NmF2 and hmF2 . C CREM SUBROUTINE TOPH05(covi,AMLAT,TIME,HMAX,HT05,sg) SUBROUTINE TOPH05(rz,AMLAT,TIME,HMAX,HT05,sg) C C -C// Gulyaeva T.L. (2003) Variations in the half-width of the topside ionosphere +C// Gulyaeva T.L. (2003) Variations in the half-width of the topside ionosphere C// according to the observations by space ionosondes ISIS 1,ISIS 2, and IK19. C// International J. of Geomagnetism and Aeronomy, 4(3), 201-207. -C// Gulyaeva T.L., Titheridge J.E. (2006) Advanced specification of electron density -C// and temperature in the IRI ionosphere-plasmasphere model. +C// Gulyaeva T.L., Titheridge J.E. (2006) Advanced specification of electron density +C// and temperature in the IRI ionosphere-plasmasphere model. C// Adv. Space Res. 38(11), 2587-2595, doi:10.1016/j.asr.2005.08.045. C C Implementation of empirical RAT=(h05top-hmF2)/hmF2 derived from ISIS and IK19 C topside electron density profiles to obtain half peak density topside height -C h05top from the Chebishev polinomial coefficients given for -C (1) 4 levels of solar activity: Rz= 0, 50, 100, 150 +C h05top from the Chebishev polinomial coefficients given for +C (1) 4 levels of solar activity: Rz= 0, 50, 100, 150 C solar radio flux covi=60, 106, 152, 198 (F10.7 option) C (2) 10 selected grids of geomagnetic latitude (N=S):0,10,20,30,40,50,60,70,80,90 C (3) 5 selected grids of local time: 0, 6, 12, 18, 24. -C (4) 4 seasonal grids: 1 equinox(sg=90deg), 2 summer (sg=180), +C (4) 4 seasonal grids: 1 equinox(sg=90deg), 2 summer (sg=180), C 3 equinox (sg=270), 4 winter(sg=360) C - DIMENSION CVLEV(4) - COMMON /BLOCK1/HMF2,XNMF2,XHMF1,F1REG + DIMENSION CVLEV(4) + COMMON /BLOCK1/HMF2,XNMF2,XHMF1,F1REG & /QTOP/Y05,H05TOP,QF,XNETOP,XM3000,HHALF,TAU,HTOP,QF0 crem DATA CVLEV/60.,106.,152.,198./ DATA CVLEV/0.,50.,100.,150./ ! Rz levels LOGICAL F1REG ABMLAT=ABS(AMLAT) -crem IR=IFIX((covi-60.)/46.)+1 - IR=IFIX(rz/50.)+1 +crem IR=IFIX((covi-60.)/46.)+1 + IR=IFIX(rz/50.)+1 M1=IFIX(ABMLAT/10.)+1 L1=IFIX(TIME/6.)+1 M2=M1+1 @@ -827,12 +827,12 @@ C CHEBISHEV POLINOMIALS FOR ABMLAT(10),HOURLT(5) C CR((C0...C5),(LT=0,6,...24),(SG=season grids=90,180,270,360) C (COV=60,106,152,198) C Ref. T.L.Gulyaeva, J.E.Titheridge. Advanced specification of electron density and -C temperature in the IRI ionosphere-plasmasphere model. Adv. Space Res., 2005. +C temperature in the IRI ionosphere-plasmasphere model. Adv. Space Res., 2005. c REAL UK(0:10),CR(0:5,5,3,4),YI(5),YY(5,3) REAL BR(6,5,3,4),YI(5),YY(5,3) REAL PL1(5),PL2(5),PL3(5),CL(0:3) -C +C DATA rad/0.01745329/ DATA PL1/-2.,-1.,0.,1.,2./ DATA PL2/2.,-1.,-2.,-1.,2./ @@ -845,13 +845,13 @@ C Equinox B0MLAT: *,-12.8000, 35.3084,-38.0043,19.6004,-4.4974,.6975 *, 5.8282,-13.3538, 9.1674,-0.9593,-0.8909,.6062 *, -1.5859, 3.5789, -3.7884, 2.7094,-1.2962,.6759 -C Summer B0MLAT +C Summer B0MLAT *, -7.1103, 21.0389,-24.5539,14.1607,-3.8537,.7266 *, 5.5333,-10.6242, 4.8751, 1.0587,-1.0821,.7527 *,-15.4487, 42.9269,-45.0314,21.4718,-4.2116,.6026 *, -6.6436, 16.4533,-15.5142, 6.8287,-1.2871,.4976 *, -7.1103, 21.0389,-24.5539,14.1607,-3.8537,.7266 -C Winter B0MLAT +C Winter B0MLAT *, 14.9103,-35.2337, 27.3078,-6.5362,-0.6265,.7509 *, 2.3846, -5.8840, 3.7023, 0.8525,-1.2663,.7086 *, -9.8846, 26.6649,-27.0173,12.6959,-2.6536,.6295 @@ -864,13 +864,13 @@ C Equinox B1MLAT *,-16.2744, 42.8047,-43.7009,20.7965,-4.0697,.6619 *,-17.3038, 44.3336,-40.9249,15.9042,-2.1554,.4796 *, -4.1218, 10.6136,-11.4922, 6.0470,-1.3620,.5563 -C Summer B1MLAT +C Summer B1MLAT *, -4.9692, 16.5753,-21.3543,12.7061,-3.1758,.6446 *, 1.9000, -2.8167, -0.9962, 3.0687,-1.3454,.6859 *, 7.6769,-14.8343, 6.7030, 1.5578,-1.0626,.4291 *, 5.4833,-10.6322, 4.7571, 1.2178,-0.8223,.4615 *, -4.9692, 16.5753,-21.3543,12.7061,-3.1758,.6446 -C Winter B1MLAT +C Winter B1MLAT *, -4.7282, 13.4491,-15.6931, 8.8388,-1.9732,.5874 *, 5.6756,-14.8458, 11.8927,-2.2632,-0.6122,.6948 *,-14.2872, 40.0829,-41.2716,18.1696,-2.7203,.4916 @@ -883,13 +883,13 @@ C Equinox B2MLAT *, 12.0462,-27.8932, 20.6241,-4.5781, 0.0814,.3501 *,-17.0551, 42.3258,-37.1874,13.3608,-1.4804,.4216 *, -3.3282, 10.4296,-12.4722, 6.7623,-1.5172,.4931 -C Summer B2MLAT +C Summer B2MLAT *, 7.3077,-17.1579, 11.6872,-0.7405,-1.0298,.5754 *, 19.2641,-45.1886, 34.3297,-8.1879,-0.1875,.6562 *, 6.0987,-11.0903, 4.3569, 1.4001,-0.7309,.3885 *, 5.9295,-13.9205, 10.2347,-2.2818, 0.0853,.3915 *, 7.3077,-17.1579, 11.6872,-0.7405,-1.0298,.5754 -C Winter B2MLAT +C Winter B2MLAT *, -1.6821, 8.6010,-13.6570, 8.6307,-1.9846,.5635 *, 5.4679,-12.3750, 7.5620, 0.5394,-1.4415,.6659 *, -8.0821, 21.9288,-21.8597, 9.3455,-1.4644,.3599 @@ -921,18 +921,18 @@ C DATA UL/-2.,-1.,0.,1.,2./ cl(k)=0. enddo C -c,, IR=IFIX((covs-60.)/46.)+1 - IR=IFIX(covs/50.)+1 +c,, IR=IFIX((covs-60.)/46.)+1 + IR=IFIX(covs/50.)+1 C Given geomagnetic latitude parameter: xi=abmlat/100. DO LS=1,3 DO LL=1,5 - B1=BR(6,LL,LS,IR) - B2=BR(5,LL,LS,IR) - B3=BR(4,LL,LS,IR) - B4=BR(3,LL,LS,IR) - B5=BR(2,LL,LS,IR) - B6=BR(1,LL,LS,IR) + B1=BR(6,LL,LS,IR) + B2=BR(5,LL,LS,IR) + B3=BR(4,LL,LS,IR) + B4=BR(3,LL,LS,IR) + B5=BR(2,LL,LS,IR) + B6=BR(1,LL,LS,IR) HLT=(LL-1)*6.0 YY(LL,LS)=B1+xi*(B2+xi*(B3+xi*(B4+xi*(B5+xi*B6)))) @@ -960,8 +960,8 @@ C Apply seasonal interpolation RATCH=ZA+ULL*(CL(1)-3.4*CL(3)+ULL*(CL(2)+ULL*CL(3))) RETURN - END -C + END +C real function fmlt(ut,xlat,xlong,day) C Calculats geomagnetic local time in hours for given C universal time UT(sec) @@ -1001,7 +1001,7 @@ C C This subroutine converts a geographic latitude and longitude C location to a corrected geomagnetic latitude. C -C INPUT: +C INPUT: C geographic latitude -90. to +90. C geographic longitude 0. to 360. positive east from Greenwich. C @@ -1009,7 +1009,7 @@ C OUTPUT: C corrected geomagnetic latitude -90. to +90. - DIMENSION CORMAG(20,91) + DIMENSION CORMAG(20,91) DATA ((CORMAG(i,j),i=1,20),j=1,31)/ +163.68,163.68,163.68,163.68,163.68,163.68, +163.68,163.68,163.68,163.68,163.68,163.68,163.68,163.68, @@ -1246,12 +1246,12 @@ C corrected geomagnetic latitude -90. to +90. +008.15,008.15,008.15,008.15,008.15,008.15,008.15,008.15, +008.15,008.15,008.15,008.15,008.15,008.15/ -C Data Input +C Data Input rlan = rga - rlo = rgo - -C From "normal" geographic latitude -C to angle from South Pole. + rlo = rgo + +C From "normal" geographic latitude +C to angle from South Pole. rla = rlan + 90 IF (rlo .EQ. 360) THEN @@ -1268,22 +1268,22 @@ C coefficients of the latitudinal points C coefficients of the longitudinal points LO1 = (INT(rlo/18)+1) corr LO2 = LO1 + 1 - LO2 = MOD(LO1,20) + 1 + LO2 = MOD(LO1,20) + 1 C Four points of Geomagnetic Coordinates gm1 = CORMAG(LO1,LA1) - gm2 = CORMAG(LO1,LA2) + gm2 = CORMAG(LO1,LA2) gm3 = CORMAG(LO2,LA1) gm4 = CORMAG(LO2,LA2) C latitudinal points - X1 = ABS(rla - (INT(rla))) + X1 = ABS(rla - (INT(rla))) X2 = 2. - X1 C longitudinal points Y1 = ABS(rlo - (INT(rlo))) Y2 = 18. - Y1 - + C X AND Y VALUES x = X1 / (X1 + X2) y = Y1 / (Y1 + Y2) @@ -1294,7 +1294,7 @@ C INTERPOLATION C OUTPUT OF THE PROGRAM C From corrected geomagnetic latitude from North Pole -C to "normal" geomagnetic latitude. +C to "normal" geomagnetic latitude. rgma = 90. - gmla END @@ -1336,4 +1336,3 @@ C----------------------------------------------------------------- return end C----------------------------------------------------------------- - diff --git a/RMextract/pyiriplas/install_notes.txt b/RMextract/pyiriplas/install_notes.txt index e747e46..643c066 100644 --- a/RMextract/pyiriplas/install_notes.txt +++ b/RMextract/pyiriplas/install_notes.txt @@ -1,6 +1,5 @@ #iriplas.pyf generated with : -f2py -m iriplas -h iriplas.pyf only: iri_plas_main : iriplas_main.for Iris2017.for irif2019.for indx2017.for igrf-12.for +f2py -m iriplas -h iriplas.pyf only: iri_plas_main : iriplas_main.for Iris2017.for irif2019.for indx2017.for igrf-12.for # remove all unnecessary declaration and add intent(out) for outf # compile standalone with f2py -c -m iriplas iriplas.pyf iriplas_main.for Iris2017.for irif2019.for indx2017.for igrf-12.for > output 2>&1 - diff --git a/RMextract/pyiriplas/irif2019.for b/RMextract/pyiriplas/irif2019.for index 7cb7db7..e31adee 100644 --- a/RMextract/pyiriplas/irif2019.for +++ b/RMextract/pyiriplas/irif2019.for @@ -1,6 +1,6 @@ C IRIF2019.FOR________________________May 2019 (T.L.Gulyaeva) C -C 05.05.2019 subroutine tcongec corrected for dimension of +C 05.05.2019 subroutine tcongec corrected for dimension of C real ionoindx(890),indrz(890) C C IRIF2017.FOR________________________May 2017 (T.L.Gulyaeva) @@ -18,7 +18,7 @@ C C IRIF2011.FOR________________________Dec 2011 (T.L.Gulyaeva) C C IRIF2007.FOR________________________Mar 2008 (T.L.Gulyaeva) -C +C C Changes of SMI plasmasphere model: one function in [h05top:hpl] C C IRIF2006.FOR________________________May 2006 (T.L.Gulyaeva) @@ -104,7 +104,7 @@ C++ if (y.lt.0.) y=abs(y) ! extra check ++++++++++ C++ C# NEW CORRECTING FACTOR QFAC: - IF((QF.EQ.1.).AND.(ABS(H-H05TOP).LT.1.)) then + IF((QF.EQ.1.).AND.(ABS(H-H05TOP).LT.1.)) then if (y.gt.0.) QF=Y05/Y if (QF.gt.50.0) QF=50. !++++++++++ endif @@ -158,7 +158,7 @@ C ELECTRON DENSITY FOR THE F1-LAYER (HZ.....HMF1). C REAL FUNCTION XE3_1(H) C ELECTRON DENSITY FOR THE F1-LAYER (HZ.....HMF1) -C USING THE NEW DEFINED F1-LAYER FUNCTION (Reinisch and Huang, Advances +C USING THE NEW DEFINED F1-LAYER FUNCTION (Reinisch and Huang, Advances C in Space Research, Volume 25, Number 1, 81-88, 2000) COMMON /BLOCK1/ HMF2,XNMF2,HMF1,F1REG & /BLOCK2/ B0,B1,D1F1 @@ -237,7 +237,7 @@ C C REAL FUNCTION XE(H) C ELECTRON DENSITY BETWEEN HA(KM) AND 1336 KM -C SUMMARIZING PROCEDURES NE1....6; +C SUMMARIZING PROCEDURES NE1....6; C SMI XXE6 PROCEDURE INCLUDED FOR 1336 TO 20,000 km DIMENSION OARR(50) COMMON /BLOCK1/HMF2,XNMF2,XHMF1,f1reg @@ -280,7 +280,7 @@ C RETURN END C -C********************************************************** +C********************************************************** FUNCTION XXE6(X) C==== SMI PLASMASPHERE ELECTRON DENSITY PROFILE ABOVE h05top C @@ -292,7 +292,7 @@ C HOUR: Local Time C INTEGER ND,DAYNR real N6370,L,lt - COMMON /DEM/W,GLON,HOUR,DAYNR,CN1000,ALON,BLON,enre,hsc + COMMON /DEM/W,GLON,HOUR,DAYNR,CN1000,ALON,BLON,enre,hsc & /QTOP/Y05,H05TOP,QF,XNETOP,XM3000,HHALF,TAU,HTOP,QF0 c HEITOP,ELTOP,ABSMLT @@ -379,7 +379,7 @@ C!!! dnb = 3.0E9*A1*A2*EXP(A3*blb) END C SUBROUTINE ablon(xlati,xlongi,alonn,blonn) -C==== SMI GRID POINTS FOR XXE6(H) +C==== SMI GRID POINTS FOR XXE6(H) DIMENSION xlat(37),xlon(37),zlon(6) common /ab/ fimeq,zlon,nl DATA xlat /10.62,10.43,10.06,9.60,9.10,8.76,8.60,8.74,9.29,9.82, @@ -917,12 +917,12 @@ C C C REAL FUNCTION HMF2EDS(XR,X,XM3,HOUR,DAY,ABML) -C D. BILITZA, F2 layer peak height (HMF2) for corrected magnetic +C D. BILITZA, F2 layer peak height (HMF2) for corrected magnetic C latitude (HMLAT) and sunspot number (XR) using coefficient C M3000(XM3) and ratio of FOF2/FOE. C [Ref. D. BILITZA ET. AL. TELECOMM.J.,46,549-553,1979] C hmF2EDS = SMI option includes HOUR (LT), DAY, ABS(MLAT) input and -C parameters of COMMON Blocks: Solar zenith angle XHI and +C parameters of COMMON Blocks: Solar zenith angle XHI and C corrected magnetic latitute HMLAT C COMMON /BLO11/XHI/B6/HMLAT,H0NE,GLT,FG1,FG2 @@ -1658,7 +1658,7 @@ C C 01/98 corrected to include a smooth transition at the modip equator C and no discontinuity at the equatorial change in season. C 09/98 new B0 values incl values at the magnetic equator -C 10/98 longitude as input to determine if magnetic equator in northern +C 10/98 longitude as input to determine if magnetic equator in northern C or southern hemisphere C REAL NITVAL @@ -1711,8 +1711,8 @@ C bfd(2,2) at modip = -18, C bfd(2,1) or bfd(1,1) at modip = 0, C bfd(1,2) at modip = 20, C bfd(1,3) at modip = 45. -C If the Longitude is between 200 and 320 degrees than the modip -C equator is in the southern hemisphere and bfd(2,1) is used at the +C If the Longitude is between 200 and 320 degrees than the modip +C equator is in the southern hemisphere and bfd(2,1) is used at the C equator, otherwise bfd(1,1) is used. c zx1=bfd(2,3) @@ -1828,7 +1828,7 @@ C SRASN=3.141592654-ATAN2(COS(OBLIQ)/SOB*SC,-COS(SLP)/COSD) RETURN END -C +C C C ************************ EPSTEIN FUNCTIONS ************************** C ********************************************************************* @@ -2924,46 +2924,46 @@ c rsn interpolation parameter c nmonth previous or following month depending c on day c -c Requires I/O UNIT=12 to read the Rz12 and IG12 indices file IG_RZ.DAT -c +c Requires I/O UNIT=12 to read the Rz12 and IG12 indices file IG_RZ.DAT +c c rz(1) & ig(1) contain the indices for the month mm and rz(2) & ig(2) c for the previous month (if day less than 15) or for the following c month (otherwise). These indices are for the mid of the month. The c indices for the given day are obtained by linear interpolation and c are stored in rz(3) and ig(3). c -c The indices file IG_RZ.DAT is structured as follows (values are -c separated by comma): +c The indices file IG_RZ.DAT is structured as follows (values are +c separated by comma): c day, month, year of the last update of this file, c a blank line c start month, start year, end month, end year, c a blank line c the IG index for December of start year - 1 (needed for interpolation) -c the 12 IG indices (13-months running mean) for start year, -c the 12 IG indices for the second year +c the 12 IG indices (13-months running mean) for start year, +c the 12 IG indices for the second year c .. and so on until the end year, c the IG index for January of end year + 1 (needed for interpolation) c a blank line c the Rz index for December of start year - 1 (needed for interpolation) c the 12 Rz indices (13-months running mean) for the start year, -c the 12 Rz indices for the second year +c the 12 Rz indices for the second year c .. and so on until the end year. c the Rz index for January of end year + 1 (needed for interpolation) -c +c c A negative Rz index means that the given index is the 13-months- -C running mean of the solar radio flux (F10.7). The close correlation +C running mean of the solar radio flux (F10.7). The close correlation C between (Rz)12 and (F10.7)12 is used to compute the (Rz)12 indices. c c An IG index of -111 indicates that no IG values are available for the -c time period. In this case a correlation function between (IG)12 and +c time period. In this case a correlation function between (IG)12 and C (Rz)12 is used to obtain (IG)12. c c The computation of the 13-month-running mean for month M requires the -c indices for the six months preceeding M and the six months following -C M (month: M-6, ..., M+6). To calculate the current running mean one -C therefore requires predictions of the indix for the next six months. -C Starting from six months before the UPDATE DATE (listed at the top of -c the file) and onward the indices are therefore based on indices +c indices for the six months preceeding M and the six months following +C M (month: M-6, ..., M+6). To calculate the current running mean one +C therefore requires predictions of the indix for the next six months. +C Starting from six months before the UPDATE DATE (listed at the top of +c the file) and onward the indices are therefore based on indices c predictions. c---------------------------------------------------------------- @@ -2972,14 +2972,14 @@ c---------------------------------------------------------------- real ionoindx(746),indrz(746) real ig(3),rz(3) logical mess - + common /iounit/konsol,mess COMMON /path/datapath character datapath*200 save ionoindx,indrz,iflag,iyst,iymst,iymend,imst - if(iflag.eq.0) then + if(iflag.eq.0) then open(unit=12,FILE=TRIM(ADJUSTL(datapath))//'ig_rz.dat', & status='old') @@ -3050,7 +3050,7 @@ c if(imm2.gt.12) then imm2=1 iyy2=yr+1 - idd2=380 + idd2=380 c if((yr/4*4.eq.yr).and.(yr/100*100.ne.yr)) idd2=381 if(yr/4*4.eq.yr) idd2=381 else @@ -3061,7 +3061,7 @@ c if((yr/4*4.eq.yr).and.(yr/100*100.ne.yr)) idd2=381 endif rz(2)=indrz(num+1) ig(2)=ionoindx(num+1) - rsn=(idn-idd1)*1./(idd2-idd1) + rsn=(idn-idd1)*1./(idd2-idd1) rz(3)=rz(1)+(rz(2)-rz(1))*rsn ig(3)=ig(1)+(ig(2)-ig(1))*rsn goto 1927 @@ -3103,7 +3103,7 @@ c month (otherwise). These indices are for the mid of the month. The c indices for the given day are obtained by linear interpolation and c are stored in rz(3) and ig(3). c -c the indices are obtained from the indices file ig_rz.dat that is +c the indices are obtained from the indices file ig_rz.dat that is c read in subroutine initialize and stored in COMMON/indices/ c---------------------------------------------------------------- integer yr, mm, day, iflag, iyst, iyend,iymst @@ -3115,36 +3115,36 @@ c---------------------------------------------------------------- COMMON /path/datapath character datapath*200 c -C NEW TLG Aug. 2013 This Procedure is using Global Electron Content, +C NEW TLG Aug. 2013 This Procedure is using Global Electron Content, C GEC12c index instead of ionospheric IG12 index C c Rz12 and GEC are determined from the file GEC_RZ.DAT which has the -c following structure: +c following structure: c day, month, year of the last update of this file, c start month, start year, end month, end year, -c the 12 GEC indices (13-months running mean) for the first year, +c the 12 GEC indices (13-months running mean) for the first year, c the 12 GEC indices for the second year and so on until the end year, c the 12 Rz indices (13-months running mean) for the first year, c the 12 Rz indices for the second year and so on until the end year. c The inteporlation procedure also requires the IG and Rz values for c the month preceeding the start month and the IG and Rz values for the -c month following the end month. These values are also included in +c month following the end month. These values are also included in c GEC_RZ. -c +c c A negative Rz index means that the given index is the 13-months- -C running mean of the solar radio flux (F10.7). The close correlation +C running mean of the solar radio flux (F10.7). The close correlation C between (Rz)12 and (F10.7)12 is used to derive the (Rz)12 indices. c c An GEC index of -111 indicates that no GEC values are available for the -c time period. In this case a correlation function between (GEC)12 and +c time period. In this case a correlation function between (GEC)12 and C (Rz)12 is used to obtain (GEC)12. c c The computation of the 13-month-running mean for month M requires the -c indices for the six months preceeding M and the six months following -C M (month: M-6, ..., M+6). To calculate the current running mean one -C therefore requires predictions of the indix for the next six months. -C Starting from six months before the UPDATE DATE (listed at the top of -c the file) and onward the indices are therefore based on indices +c indices for the six months preceeding M and the six months following +C M (month: M-6, ..., M+6). To calculate the current running mean one +C therefore requires predictions of the indix for the next six months. +C Starting from six months before the UPDATE DATE (listed at the top of +c the file) and onward the indices are therefore based on indices c predictions. if(iflag.eq.0) then open(unit=12,FILE=TRIM(ADJUSTL(datapath))//'gec_rz.dat', @@ -3156,7 +3156,7 @@ c *status='old') GOTO 20 10 PAUSE ' CANNOT FIND THE FILE "GEC_RZ.DAT". EXECUTION TEMINATED.' STOP - 20 CONTINUE + 20 CONTINUE c Read the update date, the start date and the end date (mm,yyyy), and c get number of data points to read. read(12,*) iupd,iupm,iupy @@ -3182,7 +3182,7 @@ C pause ' ' indrz(jj)=rrr endif if(ionoindx(jj).gt.-90.) goto 1 - zi=((0.0194*rrr+1.0906)-1.0)*50.0 + zi=((0.0194*rrr+1.0906)-1.0)*50.0 if(zi.gt.274.0) zi=274.0 ionoindx(jj)=zi 1 continue @@ -3257,16 +3257,16 @@ C subroutine tconind(yr,mm,day,idn,rz,sf,rsn,nmonth,nind) c---------------------------------------------------------------- C TL Gulyaeva........................................................ May, 2017 -C nind =1 ssn1_12.dat => rz(3); F10.7 => sf(3) +C nind =1 ssn1_12.dat => rz(3); F10.7 => sf(3) C nind =2 ssn2_12.dat SSN2 converted to SSN1 => rz(3); F10.7 => sf(3) -C nind =3 f107_12.dat F10.7 => sf(3) converted to SSN1 => rz(3) +C nind =3 f107_12.dat F10.7 => sf(3) converted to SSN1 => rz(3) C nind =4 geci_12.dat GEC => rz(3); F10.7 => sf(3) C nind =5 teci_12.dat TEC => rz(3); F10.7 => sf(3) C nind =6 igin_12.dat IG => rz(3); F10.7 => sf(3) C nind =7 mgii_12.dat MgII => rz(3); F10.7 => sf(3) C nind =8 lyma_12.dat Lyman-alpha => rz(3); F10.7 => sf(3) C Ref. T.L.Gulyaeva et al., 2017. TEC proxy index of solar activity for the -C International Reference Ionosphere IRI and its extension to +C International Reference Ionosphere IRI and its extension to C Plasmasphere IRI-PLAS model.Int. J. Sci. Eng. Applied Sci.,3,5,144-150, C http://ijseas.com/index.php/issue-archive-2/volume3/issue-5/ C @@ -3285,8 +3285,8 @@ c month (otherwise). These indices are for the mid of the month. The c indices for the given day are obtained by linear interpolation and c are stored in rz(3) and sf(3). c -c the indices are obtained from the indices files according to nind -c +c the indices are obtained from the indices files according to nind +c c---------------------------------------------------------------- integer yr, mm, day integer nind @@ -3295,33 +3295,33 @@ c---------------------------------------------------------------- COMMON /BXY/xxpr,yypr c C -c rz(3) is read from xxpr_12.dat file (xxpr is defined according to nind) -c and the sf(3) solar radio flux index is determined from yypr_12.dat file -c which have the following structure: +c rz(3) is read from xxpr_12.dat file (xxpr is defined according to nind) +c and the sf(3) solar radio flux index is determined from yypr_12.dat file +c which have the following structure: c day, month, year of the last update of this file, c start month, start year, end month, end year, -c the 12 indices (13-months running mean) for the first year, +c the 12 indices (13-months running mean) for the first year, c the 12 indices for the second year and so on until the end year, c The inteporlation procedure also requires the proxy index values for c the month preceeding the start month and the proxy index values for the -c month following the end month. These values are also included in +c month following the end month. These values are also included in c xxpr_12.dat and yypr_12.dat file. -c -c Input of nind=1 (default) means that the given index is the 13-months-running mean of -c SSN1 (former Rz12) and the solar radio flux (F10.7). The close correlation between Rz12 +c +c Input of nind=1 (default) means that the given index is the 13-months-running mean of +c SSN1 (former Rz12) and the solar radio flux (F10.7). The close correlation between Rz12 c and other solar proxies is used to derive the rz(3) and sf(3) indices. c c c The computation of the 13-month-running mean for month M requires the -c indices for the six months preceeding M and the six months following -C M (month: M-6, ..., M+6). To calculate the current running mean one -C therefore requires predictions of the index for the next six months. -C Starting from six months before the UPDATE DATE (listed at the top of -c the file) and onward the indices are therefore based on indices +c indices for the six months preceeding M and the six months following +C M (month: M-6, ..., M+6). To calculate the current running mean one +C therefore requires predictions of the index for the next six months. +C Starting from six months before the UPDATE DATE (listed at the top of +c the file) and onward the indices are therefore based on indices c predictions. C C Check nind = 1,...,8:: - if ((nind.eq.0).or.(nind.gt.8)) then + if ((nind.eq.0).or.(nind.gt.8)) then write(*,*) ' WRONG OPTION FOR SOLAR PROXY JIND = ',nind, + ' EXECUTION TEMINATED.' PAUSE ' ' @@ -3361,76 +3361,76 @@ C C C select case (nind) -C - case (1) -C - 1 xxpr='ssn1' - call subproxy(xxpr,yr,mm,iyy2,imm2,rz) +C + case (1) +C + 1 xxpr='ssn1' + call subproxy(xxpr,yr,mm,iyy2,imm2,rz) yypr='f107' - call subproxy(yypr,yr,mm,iyy2,imm2,sf) + call subproxy(yypr,yr,mm,iyy2,imm2,sf) goto 33 -C - case (2) -C - 2 xxpr='ssn2' - call subproxy(xxpr,yr,mm,iyy2,imm2,rz) +C + case (2) +C + 2 xxpr='ssn2' + call subproxy(xxpr,yr,mm,iyy2,imm2,rz) rz(1)=0.7*rz(1) rz(2)=0.7*rz(2) yypr='f107' - call subproxy(yypr,yr,mm,iyy2,imm2,sf) + call subproxy(yypr,yr,mm,iyy2,imm2,sf) goto 33 -C - case (3) -C - 3 yypr='f107' - call subproxy(yypr,yr,mm,iyy2,imm2,sf) - rz(1)=1.076*sf(1)-65.7817 - rz(2)=1.076*sf(2)-65.7817 +C + case (3) +C + 3 yypr='f107' + call subproxy(yypr,yr,mm,iyy2,imm2,sf) + rz(1)=1.076*sf(1)-65.7817 + rz(2)=1.076*sf(2)-65.7817 if (rz(1).lt.0.) rz(1)=0. if (rz(2).lt.0.) rz(2)=0. goto 33 -C - case (4) -C - 4 xxpr='geci' - call subproxy(xxpr,yr,mm,iyy2,imm2,rz) +C + case (4) +C + 4 xxpr='geci' + call subproxy(xxpr,yr,mm,iyy2,imm2,rz) yypr='f107' - call subproxy(yypr,yr,mm,iyy2,imm2,sf) + call subproxy(yypr,yr,mm,iyy2,imm2,sf) goto 33 -C - case (5) -C - 5 xxpr='teci' - call subproxy(xxpr,yr,mm,iyy2,imm2,rz) +C + case (5) +C + 5 xxpr='teci' + call subproxy(xxpr,yr,mm,iyy2,imm2,rz) yypr='f107' - call subproxy(yypr,yr,mm,iyy2,imm2,sf) + call subproxy(yypr,yr,mm,iyy2,imm2,sf) goto 33 -C - case (6) -C - 6 xxpr='igin' - call subproxy(xxpr,yr,mm,iyy2,imm2,rz) +C + case (6) +C + 6 xxpr='igin' + call subproxy(xxpr,yr,mm,iyy2,imm2,rz) yypr='f107' - call subproxy(yypr,yr,mm,iyy2,imm2,sf) + call subproxy(yypr,yr,mm,iyy2,imm2,sf) goto 33 -C - case (7) -C - 7 xxpr='mgii' - call subproxy(xxpr,yr,mm,iyy2,imm2,rz) +C + case (7) +C + 7 xxpr='mgii' + call subproxy(xxpr,yr,mm,iyy2,imm2,rz) yypr='f107' - call subproxy(yypr,yr,mm,iyy2,imm2,sf) + call subproxy(yypr,yr,mm,iyy2,imm2,sf) goto 33 -C - case (8) -C - 8 xxpr='lyma' - call subproxy(xxpr,yr,mm,iyy2,imm2,rz) +C + case (8) +C + 8 xxpr='lyma' + call subproxy(xxpr,yr,mm,iyy2,imm2,rz) yypr='f107' - call subproxy(yypr,yr,mm,iyy2,imm2,sf) + call subproxy(yypr,yr,mm,iyy2,imm2,sf) goto 33 C+++++++ - end select + end select 33 continue if(day.lt.midm) goto 34 rsn=(idn-idd1)*1./(idd2-idd1) @@ -3451,9 +3451,9 @@ C C C TL Gulyaeva....................................................May, 2017 C Subroutine to read 12-monthly smoothed solar proxy data -C for given year=kyr1 and month = kmn1 +C for given year=kyr1 and month = kmn1 C kyr2,kmn2 denoted either preceding month or the following month -C zz(1) results for the given month kyr1,kmn1, and zz(2) for kyr2,kmn2 +C zz(1) results for the given month kyr1,kmn1, and zz(2) for kyr2,kmn2 C CHARACTER*4 xxxx CHARACTER*12 infile @@ -3473,9 +3473,9 @@ C 10 write(*,*) ' CANNOT FIND THE FILE ',infile,' EXECUTION TEMINATED.' PAUSE ' ' STOP - 20 CONTINUE + 20 CONTINUE c Read the update date, the start date and the end date (mm,yyyy) -c +c read(12,*) iupd,iupm,iupy read(12,*) imst,iyst, imend, iyend c @@ -3497,7 +3497,7 @@ c c c Read year and monthly input values 11 read(12,*,err=15,end=15) kyyyy, (dat(i),i=1,12) - IF (kyr1.eq.kyr2) THEN + IF (kyr1.eq.kyr2) THEN if (kyyyy.eq.kyr1) then zz(1)=dat(kmn1) zz(2)=dat(kmn2) @@ -3505,7 +3505,7 @@ c Read year and monthly input values else goto 11 endif - ENDIF + ENDIF IF (kyr1.lt.kyr2) THEN !+ C kyr1 < kyr2 IF (kyr1.eq.kyyyy) THEN ! @@ -3523,7 +3523,7 @@ C kyr1 < kyr2 ELSE !+ C kyr2 < kyr1 IF (kyr2.ge.iyst) THEN ! -C kyr2 > iyst +C kyr2 > iyst if (kyr2.eq.kyyyy) then !! zz(2)=dat(kmn2) read(12,*,err=15,end=15) kyyyy,zz(1) @@ -3538,14 +3538,14 @@ C kyr2 < iyst zz(2)=zz(1) else !!! goto 11 - endif !!! + endif !!! ENDIF !! ENDIF !+ C 15 write(*,*) 'End-of-file ',infile pause ' ' stop -C +C 16 close(unit=12) return end @@ -3751,9 +3751,9 @@ c c c subroutine iri_tec (hstart,hend,istep,tectot,tectop,tecbot) -c----------------------------------------------------------------------- +c----------------------------------------------------------------------- C subroutine to compute the total ionospheric content -C INPUT: +C INPUT: C hstart altitude (in km) where integration should start C hend altitude (in km) where integration should end C istep =0 [fast, but higher uncertainty <5%] @@ -3764,22 +3764,22 @@ C tectot total ionospheric content in tec-units (10^16 m^-2) C tectop topside content (in %) C tecbot bottomside content (in %) C -C The different stepsizes for the numerical integration are -c defined as follows (h1=100km, h2=hmF2-10km, h3=hmF2+10km, +C The different stepsizes for the numerical integration are +c defined as follows (h1=100km, h2=hmF2-10km, h3=hmF2+10km, c h4=hmF2+150km, h5=hmF2+250km): C istep h1-h2 h2-h3 h3-h4 h4-h5 h5-hend C 0 2.0km 1.0km 2.5km exponential approximation C 1 2.0km 1.0km 2.5km 10.0km 30.0km -C 2 1.0km 0.5km 1.0km 1.0km 1.0km +C 2 1.0km 0.5km 1.0km 1.0km 1.0km C -c----------------------------------------------------------------------- +c----------------------------------------------------------------------- logical expo dimension step(5),hr(6) common /block1/hmf2,xnmf2,hmf1,f1reg logical f1reg -ctest +ctest save expo = .false. @@ -3792,10 +3792,10 @@ ctest hr(4) = hmf2+150. hr(5) = hmf2+250. hr(6) = hend - do 2918 i=2,6 + do 2918 i=2,6 2918 if (hr(i).gt.hend) hr(i)=hend - if (istep.eq.0) then + if (istep.eq.0) then step(1)=2.0 step(2)=1.0 step(3)=2.5 @@ -3874,7 +3874,7 @@ cc YNE = XE_1(hx) zzz = sumtop + sumbot tectop = sumtop / zzz * 100. tecbot = sumbot / zzz * 100. - tectot = zzz * xnmf2 + tectot = zzz * xnmf2 return 5 num_step = 3 @@ -3886,7 +3886,7 @@ cc xntop = xe_1(hei_end)/xnmf2 xntop = xe(hei_end)/xnmf2 if(xntop.gt.0.9999) then - ss_t = top_end + ss_t = top_end goto 2345 endif @@ -3899,7 +3899,7 @@ cc xntop = xe_1(hei_end)/xnmf2 C hss = 360. xkk = exp ( - top_end / hss ) - 1. x_2 = hei_2 - x_3 =hei_top-hss*alog(xkk*(hei_3 - hei_top)/top_end + 1.) + x_3 =hei_top-hss*alog(xkk*(hei_3 - hei_top)/top_end + 1.) x_4 =hei_top-hss*alog(xkk*(hei_4 - hei_top)/top_end + 1.) x_5 = hei_end @@ -3929,10 +3929,10 @@ cc ed_4 = xe_1(x_4)/xnmf2 ss_4=( ed_5 - ed_4 ) * ( x_5 - x_4 ) / alog ( ed_5 / ed_4 ) endif - ss_t = ss_2 + ss_3 + ss_4 + ss_t = ss_2 + ss_3 + ss_4 2345 sumtop = sumtop + ss_t * 1000. - + zzz = sumtop + sumbot tectop = sumtop / zzz * 100. tecbot = sumbot / zzz * 100. @@ -4004,17 +4004,17 @@ C modified for use in IRI --------- D. Bilitza -------- March 1991 C C CHANGES: C 11/09/99 always calculated Legendre; 'if glat' and 'if stl' taken out; -C 11/09/99 use UMR, dumr and humr from COMMON +C 11/09/99 use UMR, dumr and humr from COMMON C C INPUT: -C IDAY - DAY OF YEAR +C IDAY - DAY OF YEAR C SEC - UT(SEC) C GLAT - GEODETIC LATITUDE(DEG) C GLONG - GEODETIC LONGITUDE(DEG) C STL - LOCAL APPARENT SOLAR TIME(HRS) C F107A - 3 MONTH AVERAGE OF F10.7 FLUX C -C OUTPUT: +C OUTPUT: C TINF - EXOSPHERIC TEMPERATURE (K) C TLB - TEMPERATURE AT LOWER BOUNDARY (K) C SIGMA - SHAPE PARAMETER FOR TEMPERATURE PROFILE @@ -4060,7 +4060,7 @@ C PLG(5,3) = 7.5*(7.*C2 -1.)*S2 PLG(6,3) = 3.*C*PLG(5,3)-2.*PLG(4,3) PLG(4,4) = 15.*S2*S - PLG(5,4) = 105.*S2*S*C + PLG(5,4) = 105.*S2*S*C PLG(6,4)=(9.*C*PLG(5,4)-7.*PLG(4,4))/2. PLG(7,4)=(11.*C*PLG(6,4)-8.*PLG(5,4))/3. XL=GLAT @@ -4081,7 +4081,7 @@ C EXOSPHERIC TEMPERATURE C C F10.7 EFFECT T1 = ( 3.11701E-3 - 0.64111E-5 * DFA ) * DFA - F1 = 1. + 0.426385E-2 * DFA + F1 = 1. + 0.426385E-2 * DFA F2 = 1. + 0.511819E-2 * DFA F3 = 1. + 0.292246E-2 * DFA C TIME INDEPENDENT @@ -4109,16 +4109,16 @@ C TERDIURNAL Z1 = PLG(5,4) * CD14 Z2 = PLG(7,4) * CD14 T14=(0.147284E-2*PLG(4,4)-0.173933E-3*Z1+0.365016E-4*Z2)*S3TLOC - 2 +(0.341345E-3*PLG(4,4)-0.153218E-3*Z1+0.115102E-3*Z2)*C3TLOC + 2 +(0.341345E-3*PLG(4,4)-0.153218E-3*Z1+0.115102E-3*Z2)*C3TLOC T7814 = F2 * ( T7 + T8 + T14 ) C LONGITUDINAL - T11= F3 * (( 0.562606E-2 * PLG(3,2) + 0.594053E-2 * PLG(5,2) + - $ 0.109358E-2 * PLG(7,2) - 0.301801E-2 * PLG(2,2) - - $ 0.423564E-2 * PLG(4,2) - 0.248289E-2 * PLG(6,2) + + T11= F3 * (( 0.562606E-2 * PLG(3,2) + 0.594053E-2 * PLG(5,2) + + $ 0.109358E-2 * PLG(7,2) - 0.301801E-2 * PLG(2,2) - + $ 0.423564E-2 * PLG(4,2) - 0.248289E-2 * PLG(6,2) + $ (0.189689E-2 * PLG(2,2) + 0.415654E-2 * PLG(4,2)) * CD14 $ ) * COS(umr*GLONG) + - $ ( -0.11654E-1 * PLG(3,2) - 0.449173E-2 * PLG(5,2) - - $ 0.353189E-3 * PLG(7,2) + 0.919286E-3 * PLG(2,2) + + $ ( -0.11654E-1 * PLG(3,2) - 0.449173E-2 * PLG(5,2) - + $ 0.353189E-3 * PLG(7,2) + 0.919286E-3 * PLG(2,2) + $ 0.216372E-2 * PLG(4,2) + 0.863968E-3 * PLG(6,2) + $ (0.118068E-1 * PLG(2,2) + 0.331190E-2 * PLG(4,2)) * CD14 $ ) * SIN(umr*GLONG) ) @@ -4133,9 +4133,9 @@ C C TEMPERATURE DERIVATIVE AT LOWER BOUNDARY C C F10.7 EFFECT - T1 = 0.252317E-2 * DFA + T1 = 0.252317E-2 * DFA C TIME INDEPENDENT - T2 = -0.467542E-1 * PLG(3,1) + 0.12026 * PLG(5,1) + T2 = -0.467542E-1 * PLG(3,1) + 0.12026 * PLG(5,1) C ASYMMETRICAL ANNUAL CD14 = COS( DR * (IDAY+8.45398) ) T5 = -0.13324 * PLG(2,1) * CD14 @@ -4169,7 +4169,7 @@ C Sigma [Eq. A5] !$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ SUBROUTINE TEMODEL(Tein, Ht, TLoc, gmLat,ggLat, aMon, rFlx, aKp) ! New Te, Ti [,Tn] model, August 2004,.. 8/6/06: TeModela.f90, without debug code. -! For use with IRI; see +! For use with IRI; see ! Adv.Space Res Vol.38,#11, 2587-2595, 2006. !INPUTS: ! Ht = km above the surface of the earth. @@ -4204,14 +4204,14 @@ C Sigma [Eq. A5] !(B) To use the smoothed sunspot number Rz in place of S10.7 (the normal sFlx), call ! TeModel with rFlx= -Rz. This is used to calculate sFlx from standard equns. !==================================================================================== -!-USED: Eqns in JGeoRes Vol103,p2261,1998; +!-USED: Eqns in JGeoRes Vol103,p2261,1998; !-------with updates from Adv.Space Res Vol.38,#11, 2587-2595, 2006. ! Comments give eqn nos from JGR,1998; except Nxx is eqn (xx) from ASR,2006 paper. !-ADDED: Variables polz and dayz, to ensure smooth varns over pole, equator. !-ALLOWS for conjugate heating, using mixing factor xh= h/heq to match Te at equator. !-J.E.Titheridge, March 2006. Send comments/problems to j.titheridge@auckland.ac.nz. !Copyright: John Titheridge, Physics Department, University of Auckland, New Zealand. - real:: Tein(3), gmLat, ggLat + real:: Tein(3), gmLat, ggLat real:: TD(5)=(/1250., 3460.,-3140., 0.27, -0.60 /) !Rational fit to T vs Lat. real:: GD(5)=(/ 2.09, -3.00, 1.13, -1.20, 0.835/) !Rational fit to G vs Lat. real:: AD(5)=(/ 0.22, 0.016, -0.23, -2.08, 1.22 /) !xD()= Day fits, to T,G,A. @@ -4220,12 +4220,12 @@ C Sigma [Eq. A5] real:: AN(5)=(/0.396, -0.81, 0.417, -2.17, 1.22 /) real,save:: TcD,TcN,GcD,GcN,AoD,AoN, TNit,TDay, FLine,Flat,dFlat !These values real,save:: heq,polz,dayz, sRise,slong, Bnu, TKp=0. !are saved for - real,save:: zHt,zLoc,zLat,zMon, zKp,zRise, cLat,sL2 + real,save:: zHt,zLoc,zLat,zMon, zKp,zRise, cLat,sL2 real,save:: TDv(2), TNv(2), TDiur(2), TNa=0. !conjugate, diurnal varns logical,save:: NewFline=.false. !Flags changed field line data zHt,zLoc,zLat,zsLat, zMon,zKp,zRise / 7*-99. / !Save to check if changed parameter(Pi=3.14159265,d2r=Pi/180., ex=2./7., ee=1.e-9) - parameter(Re=6371.2, ho=400, Ro=1+ho/Re, Ro2=Ro**2) + parameter(Re=6371.2, ho=400, Ro=1+ho/Re, Ro2=Ro**2) rmLat= gmLat ; if (gmLat==0.) rmLat= ggLat !GeoMagnetic Latitude, deg if (abs(rmLat)>89.8) rmLat= sign(89.8, rmlat) !6'06 limit to 89.8d drLat= ggLat-rmLat ; if(ggLat==0.) drLat=0. !GeoGr-GeoMag (field line) @@ -4371,10 +4371,10 @@ C ht1=H05TOP xne1=XNETOP - ht2=float(istart) + ht2=float(istart) do i=istart,1336 ht2=ht2+1.0 - xne2=xxe6(ht2) + xne2=xxe6(ht2) if ((xxx.le.xne1).and.(xxx.gt.xne2)) then hsip=ht1+(ht2-ht1)/(xne2-xne1)*(xxx-xne1) exit @@ -4408,15 +4408,15 @@ c- xxx=xnmf2/2.718282 ! NmF2/e ht1=hmf2 xne1=xnmf2 step=100. - ht2=float(istart) + ht2=float(istart) C 1 ht2=ht2+step if (ht2.lt.1336.) then !>>>>>>>>>> - xne2=xe1(ht2) ! + xne2=xe1(ht2) ! if (abs(xne2-xnetop).lt.0.1) then H05TOP=ht2 goto 2 - endif + endif if ((xnetop.ge.xne2).and.(xnetop.lt.xne1)) then !,,,,,,,,,,,,, ht2=ht2-step ! step=step/10. @@ -4430,7 +4430,7 @@ C else !............ xne1=xne2 ht1=ht2 - goto 1 + goto 1 endif !.............. endif !>>>>>>>>>>>>>>>>>>>>> 2 RETURN @@ -4443,11 +4443,11 @@ C Model of dh=dlog_hmF2, in terms of log10(NeF2/NmF2), abs(MLAT), deg., SG=Sday, C C (1) 2 levels of solar activity: Rz= 20, 120 C (2) 5th order polinomial for geomagnetic latitudes (N=S):0,10,20,30,40,50,60,70,80,90. -C (4) 4 seasonal grids: 1 equinox(sg=90deg), 2 summer (sg=180), +C (4) 4 seasonal grids: 1 equinox(sg=90deg), 2 summer (sg=180), C 3 equinox (sg=270), 4 winter(sg=360) -C Gulyaeva, T. Empirical model of ionospheric storm effects on the F2 layer peak height -C associated with changes of peak electron density, J. Geophys. Res., 117, A02302, -C doi:10.1029/2011JA017158, 2012. +C Gulyaeva, T. Empirical model of ionospheric storm effects on the F2 layer peak height +C associated with changes of peak electron density, J. Geophys. Res., 117, A02302, +C doi:10.1029/2011JA017158, 2012. C DIMENSION YY(3),XX(3) &,BR(6,3,2) ! 6 beta coef, 3 seasons, 2 Rz levels @@ -4459,29 +4459,29 @@ C C Polinomial coefficients A1, A2, A3, A4, A5, A6 for Rz=20: C Equinox: * 708.327,-1527.953, 1103.833, -304.492, 34.062, -4.422 -C Summer +C Summer *,-64.5256, 254.8368, -291.2572, 97.7416, 8.4343, -3.9076 C Winter: *,99.9013, -61.4048,-120.2377, 92.2898, -4.6909, -2.9850 C Polinomial coefficients A1, A2, A3, A4, A5, A6 for Rz=120: C Equinox: *,271.9513,-261.3368,-200.8858, 249.5253, -47.7269, -2.0143 -C Summer +C Summer *,-422.818,1012.842, -890.418, 347.730, -54.262, 1.859 -C Winter: +C Winter: *,145.3128,-128.5541,-131.3022, 148.7525, -29.4966, -1.1053/ DATA BR/ C Polinomial coefficients B1, B2, B3, B4, B5, B6 for Rz=20: C Equinox: * 3.0154, -6.4793, 4.8852, -1.3451, 0.0490, -0.1681 -C Summer +C Summer *,-5.8795, 17.7169, -18.0480, 7.5002, -1.1586, -0.1527 -C Winter: +C Winter: *,24.7256, -57.3807, 45.7255, -13.6397, 0.9003, -0.1040 -C Polinomial coefficients B1, B2, B3, B4, B5, B6 for Rz=120: -C Equinox: +C Polinomial coefficients B1, B2, B3, B4, B5, B6 for Rz=120: +C Equinox: *,10.3154, -23.8605, 19.0188, -5.5255, 0.2329, -0.1574 -C Summer +C Summer *,-3.3154, 9.3716, -9.1249, 3.2476, -0.1863, -0.2255 C Winter: *,12.9551, -28.8785, 22.2281, -6.2295, 0.1901, -0.0897/ @@ -4522,7 +4522,7 @@ C Apply seasonal interpolation C IF (IR.eq.2) THEN goto 26 - ELSE + ELSE IR=2 YB1=YB XA1=XA diff --git a/RMextract/pyiriplas/iriplas.pyf b/RMextract/pyiriplas/iriplas.pyf index d0dd0c0..81a479b 100644 --- a/RMextract/pyiriplas/iriplas.pyf +++ b/RMextract/pyiriplas/iriplas.pyf @@ -1,7 +1,7 @@ ! -*- f90 -*- ! Note: the context of this file is case sensitive. -python module _iriplas ! in +python module _iriplas ! in interface ! in :_iriplas subroutine iri_plas_main(path,alati,along,jmag,iyyyy,mmdd,hours,outf) ! in :iri:iriplas_main.for character*200 :: path @@ -13,7 +13,7 @@ python module _iriplas ! in real :: hours real dimension(12,121), intent(out) :: outf end subroutine iri_plas_main - end interface + end interface end python module _iriplas ! This file was auto-generated with f2py (version:2). diff --git a/RMextract/pyiriplas/iriplas_main.for b/RMextract/pyiriplas/iriplas_main.for index c6dab26..e91213a 100644 --- a/RMextract/pyiriplas/iriplas_main.for +++ b/RMextract/pyiriplas/iriplas_main.for @@ -14,24 +14,24 @@ CC T.L. Gulyaeva Iriplas1 Dec. 2011 CC CC T.L. Gulyaeva Isomain7 June 2009 CC -CC ISO_IRI MAIN PROGRAM +CC ISO_IRI MAIN PROGRAM CC CC EARTH'S MODEL OF IONOSPHERE AND PLASMASPHERE CC CC INCLUDING IRI/SMI/ISOMAIN3 SUBROUTINES CC CC -CC PRODUCTS: ELECTRON DENSITY PROFILES +CC PRODUCTS: ELECTRON DENSITY PROFILES CC AND TOTAL ELECTRON CONTENT CC AT ALTITUDES OF 65 TO 35000 KM AT ANY LOCATION OF THE EARTH CC -CC INPUT: YEAR, MONTH, DAY, HOUR, LOCATION, SUNSPOT NUMBER, +CC INPUT: YEAR, MONTH, DAY, HOUR, LOCATION, SUNSPOT NUMBER, CC MAGNETIC AP/KP-INDEX, SOLAR RADIO FLUX AND SOLAR PROXY INDEX (8 options) CC OPTIONAL: foF2 AND/OR hmF2/OR M3000F2 (IF ZERO, CCIR MAPS ARE USED CC INCLUDING IRI_STORM MODEL) CC NEW OPTION: TEC INPUT (IF TEC=0, IRI-Plas TEC CALCULATION) -CC -CC OUTPUT: ELECTRON DENSITY PROFILES AND +CC +CC OUTPUT: ELECTRON DENSITY PROFILES AND CC ELECTRON CONTENT AT SELECTED CC ALTITUDES FROM 80km TO THE PLASMAPAUSE (hpl < 35000km). CC STANDARD SET OF PARAMETERS / Ne(h),fN(h) profiles / @@ -43,11 +43,11 @@ C Temodel-2006 subroutine (by J. Titheridge) is included for Te, Ti, Tn above 40 C C Changes of ISOMAIN3.FOR___________________________Feb. 2005 C -C Dependence of foF2 and M3000F2 on sunspot number Rz is used +C Dependence of foF2 and M3000F2 on sunspot number Rz is used C replacing interpolation of CCIR maps versus ionospheric IG-index used by IRI-2000/1995 C C Chebishev polinomial approximation is introduced (SUBROUTINE CHEBISH) for -C topside ratio of half-width to F2 layer peak height depending +C topside ratio of half-width to F2 layer peak height depending C on geomagnetic latitude and local time C C Changes from ISOMAIN2.FOR_________________________July 2003 @@ -59,21 +59,21 @@ C ISIS and IK19 topside electron density profiles C C contains IRIT13, IONCORR, IRI_TEC----D.Bilitza-- Oct 20, 1995 C INTEGR, CIRA-86 , STORM, APF ______________________ IRI-2001 -C SMI-source: CORDM, new: GKPM using results of APF +C SMI-source: CORDM, new: GKPM using results of APF C ___________________________________T.L.Gulyaeva___Sep. 2001 C C ---------------------------------------------------------------- C -C +C SUBROUTINE IRI_PLAS_MAIN(path,ALATI,ALONG,JMAG,IYYYY,MMDD,HOURS, & OUTF) c change code such that it takes input from array of booleans (if necessary) + above values -c write output to array instead of file. use irisub as example code - +c write output to array instead of file. use irisub as example code + C----------------------------------------------------------------- c Program for numerical integration of IRI profiles from h=100km -C to h=alth. +C to h=alth. C h=hpl IS ALLOWED WITH SMI XXE6(H) AMENDMENT C INPUT: ALATI,ALONG LATITUDE NORTH AND LONGITUDE EAST IN DEGREES C jmag =0 geographic =1 geomagnetic coordinates @@ -84,19 +84,19 @@ C* jinp =1(SSN1); 2(SSN2); 3(F10.7); 4(GEC); 5(TEC); 6(IG); 7(MgII); 8 (Lym-a C* jinp =0 previous version using input of gec_rz.dat file C jout = 0 NO OUTPUT Ne(h)& fN(h) PROFILES C jout = 1 OUTPUT Ne(h)& fN(h) PROFILES -C jstr = 0 no foF2 STORM model -C Jstr = 1 foF2 STORM model included +C jstr = 0 no foF2 STORM model +C Jstr = 1 foF2 STORM model included C juc = 0 input foF2>0 and/or hmF2>0 (or M3000F2*100.+1000.) C juc = 1 option of CCIR maps of foF2 and M3000F2 -C juc = 2 option of URSI foF2 map +C juc = 2 option of URSI foF2 map C hbeg,hend upper and lower integration IRI limits in km C RZS sunspot number (option of 81-days average input) C RZS=-1 : sunspot number from aprz.dat file used C XKP geomagnetic Kp-index (option of input) C XKP=-1 : accumulated Kpm produced by GKPM subroutine from aprz.dat C input: foF2>0 and/or hmF2>0 and/or TEC>0 [TEC*1E-16, m-2] -C OUTPUT: -C XHI solar zenith angle +C OUTPUT: +C XHI solar zenith angle C COV solar radio flux averaged for 81 days preceeding given day C Kpm geomagnetic index driving plasmasphere model C Api geomagnetic index driving foF2 storm model @@ -120,8 +120,8 @@ C------------------------------------------------------------------ logical jf(30),F1REG REAL RZS,COV integer daynr,numhei - character*4 xxpr,yypr - COMMON /BXY/xxpr,yypr + character*4 xxpr,yypr + COMMON /BXY/xxpr,yypr common /block1/hmf2,xnmf2,hmf1,F1REG &/PLAS/HPL,XNEPL,XKP,ICALLS,RUT,RLT,OARR,TECI,TCB,TCT,TCPL,TEC COMMON /CONST/UMR,PI/ARGEXP/ARGMAX @@ -156,7 +156,7 @@ c if (OUTPUT) THEN WRITE(*,*) 'PC Date: Year,Month,Day = ',DD,'Time = ',TT ENDIF -C +C XYEAR=DD(1:4) XMN=DD(5:6) XDY=DD(7:8) @@ -213,10 +213,10 @@ C New: gind=0. !new if (rzs.ge.0.) then if (rzs.gt.999.) then - cov=rzs-1000. ! Input cov+1000. - RZS=1.076*COV-65.7817 !* + cov=rzs-1000. ! Input cov+1000. + RZS=1.076*COV-65.7817 !* else - COV=0.9066*RZS+62.6645 !* + COV=0.9066*RZS+62.6645 !* endif C if (jinp.eq.0) then !* @@ -225,7 +225,7 @@ C endif !* C oarr(41)=cov - jf(25)=.false. + jf(25)=.false. jf(27)=.false. !new endif oarr(33)=rzs @@ -281,14 +281,14 @@ C aend=hend & 'obtained with Gulyaeva-1987 model.' endif ENDIF - call IRIS2017(JF,JMAG,ALATI,ALONG,IYYYY,MMDD,HOURS, - & abeg,aend,numhei,OUTF,JINP) + call IRIS2017(JF,JMAG,ALATI,ALONG,IYYYY,MMDD,HOURS, + & abeg,aend,numhei,OUTF,JINP) C C Add: if (JF(30)) GOTO 123 ! No TECI input C C Add: 2nd call IRIS2015c: replace TEC input with 'input' of updated foF2, hmF2: - jf(30)=.TRUE. ! + jf(30)=.TRUE. ! TECI=0. JF(8)=.FALSE. JF(9)=.FALSE. @@ -297,11 +297,11 @@ C Add: 2nd call IRIS2015c: replace TEC input with 'input' of updated foF2, hmF2: tecb= -111. TCPL= -111. icalls=icalls-1 - call IRIS2017(JF,JMAG,ALATI,ALONG,IYYYY,MMDD,HOURS, - & abeg,aend,numhei,OUTF,JINP) + call IRIS2017(JF,JMAG,ALATI,ALONG,IYYYY,MMDD,HOURS, + & abeg,aend,numhei,OUTF,JINP) C End Add commands C - + 123 IF(JF(8)) FOF2=OARR(1) IF(JF(9)) HMF2=OARR(2) IF(JF(17)) RZS=OARR(33) @@ -312,11 +312,11 @@ C CCC CC ENRE=OARR(32) GLATI=OARR(37) - GLONG=OARR(38) + GLONG=OARR(38) XMLAT=OARR(42) XMLON=OARR(40) GMLT=OARR(44) - HTOP=OARR(46) + HTOP=OARR(46) EN1000=CN1000/1.0E+06 TOT=TCB+TCT+TCPL TAU=(TOT/XNMF2)*1.0E+13 @@ -326,7 +326,7 @@ CC ENRE=OARR(32) c>> XNEPL=XNEPL/1.0E+06 C TWO OPTIONS OF OUTPUT: <7> ONLY KEY PARAMETERS; <8> FULL PROFILE if (OUTPUT) THEN - IF (JOUT.EQ.0) THEN + IF (JOUT.EQ.0) THEN GOTO 7 ELSE GOTO 8 @@ -355,7 +355,7 @@ C*********TEST 14 FORMAT (1X,F8.0,F8.0,1X,F6.3,F8.3,4F7.2,F7.1,2(F6.1),F7.1) WRITE(*,15) 15 FORMAT(4X,'H',9X,'NE',9X,'FN',6X,'Te',7X,'Ti',7X,'Tn') -C +C DO 16 I=0,NUMHEI if ((I.EQ.0).AND.(ABS(outf(0,0)-outf(0,1)).LT.1.)) goto 16 WRITE(*,17) OUTF(0,I),OUTF(1,I),OUTF(10,I) diff --git a/RMextract/pyiriplas/kp2016 b/RMextract/pyiriplas/kp2016 index 0d19eec..3d99575 100644 --- a/RMextract/pyiriplas/kp2016 +++ b/RMextract/pyiriplas/kp2016 @@ -1,366 +1,366 @@ -1601012488195747473013 71717235 67 39 39 15 5 3 6 6 221.15 25 95.10 -1601022488203023272317171313163 15 9 12 9 6 6 5 5 80.52 27 96.60 -160103248821 713201010171027114 3 5 7 4 4 6 4 12 60.31 35 98.50 -160104248822 31313 7 31713 7 76 2 5 5 3 2 6 5 3 40.10 48 92.20 -160105248823 3131317 7172017107 2 5 5 6 3 6 7 6 50.21 24 92.10 -1601062488244727273027232330234 39 12 12 15 12 9 9 15 150.94 21 96.90 -16010724882537272333272717 7198 22 12 9 18 12 12 6 3 120.73 42 99.90 -160108248826 717132327 71313120 3 6 5 9 12 3 5 5 60.31 59104.90 -16010924882717 7101013131010 90 6 3 4 4 5 5 4 4 40.21 67103.50 -1601102489 12313102317132020139 9 5 4 9 6 5 7 7 60.31 62105.40 -1601112489 21327231317273737194 5 12 9 5 6 12 22 22 120.73 32104.50 -1601122489 33320271720172730191 18 7 12 6 7 6 12 15 100.63 27102.00 -1601132489 43737201723202710191 22 22 7 6 9 7 12 4 110.63 26100.70 -1601142489 51320232313171327149 5 7 9 9 5 6 5 12 70.42 28 99.90 -1601152489 617201010 3 71010 87 6 7 4 4 2 3 4 4 40.10 31100.10 -1601162489 7 3 7 71010 3 3 3 46 2 3 3 4 4 2 2 2 30.00 30 96.70 -1601172489 8 3 013 7 7 7 7 3 47 2 0 5 3 3 3 3 2 30.00 40 97.40 -1601182489 9 3 0 0 3 713 727 60 2 0 0 2 3 5 3 12 30.10 37 97.40 -160119248910432723271013 713163 32 12 9 12 4 5 3 5 100.63 45 94.40 -1601202489111023304043474340276 4 9 15 27 32 39 32 27 231.15 43 97.20 -1601212489123757473027373743315 22 67 39 15 12 22 22 32 291.36 44100.70 -1601222489133333302717132723203 18 18 15 12 6 5 12 9 120.73 46 97.30 -1601232489141730371727302010188 6 15 22 6 12 15 7 4 110.63 43 95.80 -160124248915272317 713233713160 12 9 6 3 5 9 22 5 90.52 33100.60 -160125248916 7 3 7 0 0 0 0 0 17 3 2 3 0 0 0 0 0 10.00 46104.30 -160126248917 7 3 710 7101710 71 3 2 3 4 3 4 6 4 40.10 48111.30 -16012724891813231013 7 7 3 7 83 5 9 4 5 3 3 2 3 40.10 57109.30 -160128248919 7 3232310101013 99 3 2 9 9 4 4 4 5 50.21 53106.60 -160129248920 71310 7 7 7 7 7 65 3 5 4 3 3 3 3 3 30.10 44103.70 -160130248921 3 0 3 3 0 3 310 25 2 0 2 2 0 2 2 4 20.00 25102.00 -160131248922131723232317 717140 5 6 9 9 9 6 3 6 70.00 24 98.30 -16020124892327332323 0 3 0 3112 12 18 9 9 0 2 0 2 60.31 30 97.30 -160202248924 7 713 713202027114 3 3 5 3 5 7 7 12 60.31 36 99.10 -160203248925404327 7 710 7 7148 27 32 12 3 3 4 3 3 110.63 57108.90 -160204248926 3 3131723171310 99 2 2 5 6 9 6 5 4 50.21 75119.80 -1602052489272717172023201717158 12 6 6 7 9 7 6 6 70.00 71125.00 -1602062490 11323131310171713119 5 9 5 5 4 6 6 5 50.31 54120.00 -1602072490 220 3 71317332020133 7 2 3 5 6 18 7 7 70.31 61120.00 -1602082490 350374020 7 7 7 7175 48 22 27 7 3 3 3 3 140.84 61112.10 -1602092490 42010133023101023139 7 4 5 15 9 4 4 9 70.42 58114.10 -1602102490 527131010 0 3 713 83 12 5 4 4 0 2 3 5 40.21 52109.20 -1602112490 62013171017171333140 7 5 6 4 6 6 5 18 70.42 59109.80 -1602122490 73323203327201720193 18 9 7 18 12 7 6 7 100.63 43109.30 -1602132490 820232717 7 7 3 7111 7 9 12 6 3 3 2 3 60.31 26107.50 -1602142490 92023202320301710163 7 9 7 9 7 15 6 4 80.42 32105.40 -1602152490102323271713 71040160 9 9 12 6 5 3 4 27 90.52 34104.70 -1602162490114027374350475047341 27 12 22 32 48 39 48 39 331.36 29101.50 -1602172490125030403337334053316 48 15 27 18 22 18 27 56 291.36 26 97.50 -1602182490134047374330374330307 27 39 22 32 15 22 32 15 261.26 25 92.70 -1602192490143030233327333317226 15 15 9 18 12 18 18 6 140.84 32 91.90 -160220249015231317 710 7 3 7 87 9 5 6 3 4 3 2 3 40.21 36 97.80 -1602212490161017 7 0 3 31313 66 4 6 3 0 2 2 5 5 30.10 32 93.50 -160222249017 0 0 0 7 710 310 37 0 0 0 3 3 4 2 4 20.00 23 93.50 -16022324901820 3 3 7 7 71727 91 7 2 2 3 3 3 6 12 50.21 25 89.10 -1602242490192313131017 71013106 9 5 5 4 6 3 4 5 50.21 23 86.10 -16022524902017171310 3 3 717 87 6 6 5 4 2 2 3 6 40.10 18 89.90 -160226249021302313 710 710 3103 15 9 5 3 4 3 4 2 60.31 33 87.20 -160227249022 3101310 0 3 310 52 2 4 5 4 0 2 2 4 30.10 18 88.60 -16022824902310 01010 7 0 310 50 4 0 4 4 3 0 2 4 30.00 25 91.50 -16022924902420 0 3 7 7 0 310 50 7 7 2 3 3 3 2 4 40.00 31 89.30 -160301249025272013131313 723129 12 7 5 5 5 5 3 9 60.31 47 95.10 -1603022490262310 7202027 7 7121 9 4 3 7 7 12 3 3 60.31 54 96.50 -1603032490272023202017 7 313123 7 9 7 7 6 3 2 5 60.31 53 97.10 -1603042491 12713 0 7 0 3 0 3 53 12 5 0 3 0 2 0 2 30.10 77 98.90 -1603052491 2 3 3131317 3 0 3 55 2 2 5 5 6 2 0 2 30.10 57 94.70 -1603062491 3 310202023475763243 2 4 7 7 9 39 67 94 291.36 54 94.10 -1603072491 44747332327333340283 39 39 18 9 12 18 18 27 221.15 54 92.80 -1603082491 527201717201320 7141 12 7 6 6 7 5 7 3 70.31 43 94.20 -1603092491 61720131317131017120 6 7 5 5 6 5 4 6 60.21 63 96.00 -1603102491 72323171310101723136 9 9 6 5 4 4 6 9 60.31 55 93.70 -1603112491 81723273350273327237 6 9 12 18 48 12 18 12 170.94 35 93.00 -1603122491 92727171710302710165 12 12 6 6 4 15 12 4 90.52 48 93.90 -160313249110 717 7 7 0 0 0 7 45 3 6 3 3 0 0 0 3 20.00 39 91.50 -16031424911117101310 7203347157 6 4 5 4 3 7 18 39 110.63 48 92.40 -16031524911237404333 7274737271 22 27 32 18 3 12 39 22 221.15 41 93.10 -1603162491134723272727132743234 39 9 12 12 12 5 12 32 170.94 54 90.10 -1603172491144747373320302727268 39 39 22 18 7 15 12 12 201.05 50 90.70 -1603182491151317231720202020150 5 6 9 6 7 7 7 7 70.31 32 89.50 -1603192491161727333730332010207 6 12 18 22 15 18 7 4 130.73 25 88.60 -1603202491171327101313303317156 5 12 4 5 5 15 18 6 90.52 25 86.90 -1603212491181717171717171323138 6 6 6 6 6 6 5 9 60.31 23 88.20 -1603222491192317102010 0 317100 9 6 4 7 4 0 2 6 50.21 14 86.70 -1603232491201733331310 71327153 6 18 18 5 4 3 5 12 90.52 14 86.20 -160324249121231317101013 717110 9 5 6 4 4 5 3 6 50.21 24 86.00 -1603252491223017 713 7 7 3 3 87 15 6 3 5 3 3 2 2 50.21 23 85.10 -160326249123 0 3 3 3 3 3 310 28 0 2 2 2 2 2 2 4 20.00 22 85.10 -1603272491242723302720332320203 12 9 15 12 7 18 9 7 110.63 22 87.90 -1603282491252033 7 313102727140 7 18 3 2 5 4 12 12 80.42 21 87.40 -1603292491263030232317271013173 15 15 9 9 6 12 4 5 90.52 14 87.50 -1603302491273013132033203020179 15 5 5 7 18 7 15 7 100.63 12 83.60 -1603312492 1272710 7 7 7 313101 12 12 4 3 3 3 2 5 60.60 11 81.60 -1604012492 213 0 0 0 3 010 7 33 5 0 0 0 2 0 4 3 20.00 8 82.00 -1604022492 320 3 0 327473750187 7 2 0 2 12 39 22 48 160.94 8 81.50 -1604032492 440333023 7131737200 27 18 15 9 3 5 6 22 130.84 8 82.30 -1604042492 52327101013 3 310 99 9 12 4 4 5 2 2 4 50.21 27 83.50 -1604052492 61310 3 720102013 96 5 4 2 3 7 4 7 5 50.21 23 83.50 -1604062492 7201013202017 7 7114 7 4 5 7 7 6 3 3 50.21 14 87.20 -1604072492 820 7 713 7174353167 7 3 3 5 3 6 32 56 140.84 12 92.50 -1604082492 9402310 7 3 3 7 7100 27 9 4 3 2 2 3 3 70.31 18 98.60 -160409249210 3 0 0 3 310 0 3 22 2 0 0 2 2 4 0 2 20.00 17105.90 -1604102492111020271310 3 323109 4 7 12 5 4 2 2 9 60.31 23111.10 -160411249212 3 0 0 317301010 73 2 0 0 2 6 15 4 4 40.10 29117.20 -1604122492132323102033303743219 9 9 4 7 18 15 22 32 140.84 25111.90 -1604132492145037334040303327290 48 22 18 27 27 15 18 12 231.15 33108.80 -1604142492153330234337433330272 18 15 9 32 22 32 18 15 201.05 31111.80 -1604152492163717 0 713171313117 22 6 0 3 5 6 5 5 60.31 23113.20 -160416249217 7 7202320273333170 3 3 7 9 7 12 18 18 100.52 29114.00 -1604172492184040302023303727247 27 27 15 7 9 15 22 12 170.94 25102.90 -16041824921923131313 3 010 7 82 9 5 5 5 2 0 4 3 40.10 21 95.40 -160419249220 3 3 0 3 7 0 0 7 23 2 2 0 2 3 0 0 3 20.00 19 89.90 -160420249221 3131317 7 3 3 7 66 2 5 5 6 3 2 2 3 40.10 17 84.00 -160421249222 313 713 7131313 82 2 5 3 5 3 5 5 5 40.10 18 77.50 -1604222492232013101330402330179 7 5 4 5 15 27 9 15 110.63 15 77.50 -1604232492241323101720132743166 5 9 4 6 7 5 12 32 100.63 9 79.60 -1604242492251313171330403310169 5 5 6 5 15 27 18 4 110.63 26 82.80 -160425249226101317171313 7 3 93 4 5 6 6 5 5 3 2 40.21 31 82.90 -160426249227 710 71313 72023100 3 4 3 5 5 3 7 9 50.21 39 86.30 -1604272493 11017231727272017158 4 6 9 6 12 12 7 6 80.42 53 93.80 -1604282493 2171010 710 3 3 3 63 6 4 4 3 4 2 2 2 30.10 62 96.30 -1604292493 31010 0 0 3 0 7 7 37 4 4 0 0 2 0 3 3 20.00 56 93.80 -1604302493 4 310131313131310 88 2 4 5 5 5 5 5 4 40.00 61 95.40 -1605012493 52017172330334040220 7 6 6 9 15 18 27 27 140.84 60 93.60 -1605022493 65050202327334347293 48 48 7 9 12 18 32 39 271.26 57 91.30 -1605032493 73333231310171323165 18 18 9 5 4 6 5 9 90.52 49 91.50 -1605042493 817 7 0 71010 310 64 6 3 0 3 4 4 2 4 30.10 49 91.60 -1605052493 9 010172020201017114 0 4 6 7 7 7 4 6 50.21 41 88.70 -1605062493102317202330304030213 9 6 7 9 15 15 27 15 130.73 39 91.20 -1605072493113710132017201030157 22 4 5 7 6 7 4 15 90.52 23 89.70 -1605082493125363605053535060442 56 94 80 48 56 56 48 80 651.77 31 85.60 -1605092493136333273033274340296 94 18 12 15 18 12 32 27 281.26 36 90.20 -1605102493143037302330202320213 15 22 15 9 15 7 9 7 120.73 53 90.50 -1605112493152313 3 3 310 720 82 9 5 2 2 2 4 3 7 40.10 55 95.80 -16051224931610 7 710 7 0 713 61 4 3 3 4 3 0 3 5 30.10 59 93.90 -16051324931713 7171320132013116 5 3 6 5 7 5 7 5 50.21 54 95.40 -1605142493182317172320102333166 9 6 6 9 7 4 9 18 80.52 62103.40 -1605152493192720201733333313196 12 7 7 6 18 18 18 5 110.73 60110.80 -1605162493202330233030232713199 9 15 9 15 15 9 12 5 110.63 39104.30 -1605172493211720303027232727201 6 7 15 15 12 9 12 12 110.63 26105.60 -160518249322172317232010 310123 6 9 6 9 7 4 2 4 60.31 21104.70 -16051924932313 72317232017 7127 5 3 9 6 9 7 6 3 60.31 32101.20 -160520249324202013 710 3 717 97 7 7 5 3 4 2 3 6 50.21 32102.00 -1605212493252030432330332310212 7 15 32 9 15 18 9 4 140.84 12100.20 -160522249326132017272010 7 3117 5 7 6 12 7 4 3 2 60.31 20 99.80 -160523249327 3 71017 3 013 7 60 2 3 4 6 2 0 5 3 30.10 11 99.80 -1605242494 11313102310 3 7 7 86 5 5 4 9 4 2 3 3 40.21 17 96.70 -1605252494 2 310 010 7 3 3 0 36 2 4 0 4 3 2 2 0 20.00 23 96.10 -1605262494 3 0 3 3 3 3 71310 42 0 2 2 2 2 3 5 4 20.00 24 94.20 -1605272494 42723101720202730174 12 9 4 6 7 7 12 15 90.52 24 92.80 -1605282494 52727372017302327208 12 12 22 7 6 15 9 12 120.73 23 90.10 -1605292494 62013131710101727127 7 5 5 6 4 4 6 12 60.31 21 85.30 -1605302494 74027232010201320173 27 12 9 7 4 7 5 7 100.52 33 88.70 -1605312494 81713231313233033165 6 5 9 5 5 9 15 18 90.52 24 89.00 -1606012494 9201010 713131717107 7 4 4 3 5 5 6 6 50.21 28 88.40 -160602249410 7 7 3 7 3 7 0 7 41 3 3 2 3 2 3 0 3 20.00 9 87.70 -16060324941110 3 0 3 0 0 310 29 4 2 0 2 0 0 2 4 20.00 0 85.70 -160604249412 7 3 3 3 3 31313 48 3 2 2 2 2 2 5 5 30.10 7 82.40 -1606052494131320203350475347283 5 7 7 18 48 39 56 39 271.26 0 81.50 -1606062494144350334030173317263 32 48 18 27 15 6 18 6 211.15 0 80.80 -1606072494151713 72017203027151 6 5 3 7 6 7 15 12 80.42 13 80.80 -1606082494162320 7201717 3 7114 9 7 3 7 6 6 2 3 50.21 10 82.60 -16060924941720 7 3 310 3 7 7 60 7 3 2 2 4 2 3 3 30.10 13 87.80 -160610249418 310 3 717133030113 2 4 2 3 6 5 15 15 60.31 22 87.50 -1606112494193017171317202033167 15 6 6 5 6 7 7 18 90.52 30 90.90 -1606122494201717201723273320174 6 6 7 6 9 12 18 7 90.52 29 97.10 -16061324942127331317171013 7137 12 18 5 6 6 4 5 3 70.42 27 93.90 -1606142494222317131317235733196 9 6 5 5 6 9 67 18 160.94 26 90.40 -160615249423432020302723 710180 32 7 7 15 12 9 3 4 110.63 28 90.10 -1606162494241710132023171313126 6 4 5 7 9 6 5 5 60.31 19 91.00 -16061724942510172020232323 7143 4 6 7 7 9 9 9 3 70.31 27 89.40 -1606182494261723202323101317146 6 9 7 9 9 4 5 6 70.31 33 86.30 -160619249427201713 71313 7 3 93 7 6 5 3 5 5 3 2 40.21 34 87.90 -1606202495 1101010 3 7 31010 63 4 4 4 2 3 2 4 4 30.10 25 87.10 -1606212495 2 3 7 7 7 7 7 7 3 48 2 3 3 3 3 3 3 2 30.00 16 82.90 -1606222495 3 710 71020234333153 3 4 3 4 7 9 32 18 100.63 16 80.90 -1606232495 41730 7 710302733161 6 15 3 3 4 15 12 18 100.52 8 80.00 -1606242495 53330272020231723193 18 15 12 7 7 9 6 9 100.63 8 78.20 -1606252495 6231717 710102027131 9 6 6 3 4 4 7 12 60.31 0 79.60 -1606262495 71713131320272740170 6 5 5 5 7 12 12 27 100.63 0 79.20 -1606272495 8302323 710102023146 15 9 9 3 4 4 7 9 80.42 0 78.00 -1606282495 923201310171010 7110 9 7 5 4 6 4 4 3 50.21 0 75.50 -16062924951013 710 3 71017 7 74 5 3 4 2 3 4 6 3 40.10 0 76.00 -160630249511 3 7 3 7 3101310 56 2 3 2 3 2 4 5 4 30.00 0 74.00 -1607012495122717202013 7 0 3107 12 6 7 7 5 3 0 2 50.21 0 74.00 -160702249513 310 7 713 72737111 2 4 3 3 5 3 12 22 70.31 8 73.30 -1607032495143017131310232027153 15 6 5 5 4 9 7 12 80.42 13 74.80 -16070424951517172013 7 31317107 6 6 7 5 3 2 5 6 50.21 0 76.30 -1607052495161013 7 3 3 3 3 7 49 4 5 3 2 2 2 2 3 30.10 9 74.90 -160706249517 3 3 3 7 3 71027 63 2 2 2 3 2 3 4 12 40.10 9 79.70 -1607072495182327272333434340259 9 12 12 9 18 32 32 27 191.05 17 86.10 -1607082495193323333740373720260 18 9 18 22 27 22 22 7 181.05 29 90.00 -1607092495203020332333302320212 15 7 18 9 18 15 9 7 120.73 38 95.30 -1607102495212323172723132020166 9 9 6 12 9 5 7 7 80.42 34 97.60 -1607112495222023132020202727170 7 9 5 7 7 7 12 12 80.42 43 97.80 -1607122495233037404020172333240 15 22 27 27 7 6 9 18 160.94 41 95.50 -1607132495242720131717131020137 12 7 5 6 6 5 4 7 60.31 36100.00 -1607142495251723403317171720184 6 9 27 18 6 6 6 7 110.63 40 98.20 -1607152495262333272713231723186 9 18 12 12 5 9 6 9 100.63 48105.40 -1607162495272713131327131710133 12 5 5 5 12 5 6 4 70.31 42110.10 -1607172496 11313 71010101720100 5 5 3 4 4 4 6 7 50.21 27108.60 -1607182496 2 7 710 7 3 3 313 53 3 3 4 3 2 2 2 5 30.10 44110.60 -1607192496 310 3 3 3 7 7 350 86 4 2 2 2 3 3 2 48 80.42 41104.10 -1607202496 45343332020232310225 56 32 18 7 7 9 9 4 181.05 39111.50 -1607212496 5 7 310131023 320 89 3 2 4 5 4 9 2 7 40.21 36103.30 -1607222496 61010171720272020141 4 4 6 6 7 12 7 7 70.31 27 93.30 -1607232496 720272713 7 3 717121 7 12 12 5 3 2 3 6 60.31 19 88.90 -1607242496 817 7 71313334340173 6 3 3 5 5 18 32 27 120.73 9 84.80 -1607252496 93733273030302020227 22 18 12 15 15 15 7 7 140.84 0 75.90 -1607262496101013 7 3 710 713 70 4 5 3 2 3 4 3 5 40.10 0 75.90 -160727249611 7 7 0 0 3 3 720 47 3 3 0 0 2 2 3 7 20.00 0 73.80 -1607282496122733271717274030218 12 18 12 6 6 12 27 15 140.84 9 72.50 -1607292496133033302723202713203 15 18 15 12 9 7 12 5 120.73 11 72.60 -160730249614271710 7 7 7 710 92 12 6 4 3 3 3 3 4 50.21 14 73.10 -16073124961517 7 3 7 3 7 710 61 6 3 2 3 2 3 3 4 30.00 11 71.00 -16080124961613 7 3 0 3 31013 52 5 3 2 0 2 2 4 5 30.10 8 71.00 -1608022496171313132020374047203 5 5 5 7 7 22 27 39 150.84 8 77.10 -1608032496185040434740472723317 48 27 32 39 27 39 12 9 291.36 0 77.00 -1608042496193333272730332717227 18 18 12 12 15 18 12 6 140.84 11 78.50 -1608052496201337373730232333233 5 22 22 22 15 9 9 18 150.94 26 82.10 -1608062496212317233323231727186 9 6 9 18 9 9 6 12 100.52 27 85.50 -1608072496223717101327301327174 22 6 4 5 12 15 5 12 100.63 36 95.30 -16080824962333171713233323 7166 18 6 6 5 9 18 9 3 90.52 56 99.00 -1608092496241327173033271730194 5 12 6 15 18 12 6 15 110.63 50 94.90 -1608102496253327303320273030230 18 12 15 18 7 12 15 15 140.84 53 97.60 -16081124962617 7101713232330140 6 3 4 6 5 9 9 15 70.42 54 97.20 -1608122496273730202320171313173 22 15 7 9 7 6 5 5 100.52 50 97.30 -1608132497 1131010 710102010 90 5 4 4 3 4 4 7 4 40.21 40 92.90 -1608142497 210 3101017 310 3 66 4 2 4 4 6 2 4 2 40.10 41 89.40 -1608152497 3 7 313 7 3 7 010 50 3 2 5 3 2 3 0 4 30.00 44 89.80 -1608162497 4 3 3 7 71310 710 60 2 2 3 3 5 4 3 4 30.00 56 88.00 -1608172497 52330171013 31727140 9 15 6 4 5 2 6 12 70.42 40 84.90 -1608182497 6173010 713 7 717108 6 15 4 3 5 3 3 6 60.31 34 84.40 -1608192497 7 7 0131010131010 73 3 0 5 4 4 5 4 4 40.10 32 82.70 -1608202497 8171313 7 3 0 0 3 56 6 5 5 3 2 0 0 2 30.10 12 80.00 -1608212497 9 3 3 71027371730134 2 2 3 4 12 22 6 15 80.42 9 78.40 -16082224971013 710 3 3 71013 66 5 3 4 2 2 3 4 5 40.10 21 81.80 -1608232497111317 72333304747217 5 6 3 9 18 15 39 39 170.94 33 83.10 -1608242497125027173030172033224 48 12 6 15 15 6 7 18 160.94 34 79.70 -1608252497132010232720232333179 7 4 9 12 7 9 9 18 90.52 33 80.30 -1608262497142713 3 310201717110 12 5 2 2 4 7 6 6 60.21 35 83.60 -1608272497151723 717 7 3 7 3 84 6 9 3 6 3 2 3 2 40.10 41 85.60 -160828249716 3 3 3 7 7 0 7 3 33 2 2 2 3 3 0 3 2 20.00 44 87.10 -16082924971710 3 31317172023106 4 2 2 5 6 6 7 9 50.21 48 89.50 -1608302497182723201733434040243 12 9 7 6 18 32 27 27 170.94 50102.30 -16083124971917 710 3 7 71727 95 6 3 4 2 3 3 6 12 90.00 55 99.30 -1609012497203737403037304350304 22 22 27 15 22 15 32 48 251.26 54 96.90 -1609022497215750333343402347326 67 48 18 18 32 27 9 39 321.36 46 96.30 -1609032497223750474040434347347 22 48 39 27 27 32 32 39 331.36 45100.70 -1609042497234333373333374033289 32 18 22 18 18 22 27 18 221.15 34 98.00 -1609052497242733272017304023217 12 18 12 7 6 15 27 9 130.84 21 95.30 -1609062497252330302323233723212 9 15 15 9 9 9 22 9 120.73 29 93.90 -1609072497263027132030301713180 15 12 5 7 15 15 6 5 100.63 41 94.40 -1609082497273033302723172017197 15 18 15 12 9 6 7 6 110.63 36 95.90 -1609092498 117 3 7 0 7 3 713 57 6 2 3 0 3 2 3 5 30.10 54 92.30 -1609102498 2101313 3 0 0 717 63 4 5 5 2 0 0 3 6 30.10 55 94.30 -1609112498 3 7 3 7 7101010 7 61 3 2 3 3 4 4 4 3 30.10 46 87.50 -1609122498 4201710 713 3 313 86 7 6 4 3 5 2 2 5 40.10 40 87.50 -1609132498 520101010 3 3 310 69 7 4 4 4 2 2 2 4 40.10 26 87.00 -1609142498 61317131723172323146 5 6 5 6 9 6 9 9 70.31 19 86.20 -1609152498 727231710 7 3 713107 12 9 6 4 3 2 3 5 60.21 15 85.30 -1609162498 8 0 0 0 3 31013 7 36 0 0 0 2 2 4 5 3 20.00 9 84.50 -1609172498 913 3 017 3 0 013 49 5 2 0 6 2 0 0 5 20.00 9 81.00 -1609182498101710132320201310126 6 4 5 9 7 7 5 4 60.31 26 83.80 -16091924981113 7232323201330152 5 3 9 9 9 7 5 15 80.42 44 83.30 -1609202498124340333717232323239 32 27 18 22 6 9 9 9 160.94 37 85.20 -16092124981340202027 7 01010134 27 7 7 12 3 0 4 4 80.42 35 86.10 -160922249814201013 3 3 0 3 3 55 7 4 5 2 2 0 2 2 30.10 25 85.70 -160923249815 31310 3 3 3 310 48 2 5 4 2 2 2 2 4 30.10 41 86.10 -160924249816 3 3 3 710 31320 62 2 2 2 3 4 2 5 7 30.10 38 85.40 -1609252498173743133323274040256 22 32 5 18 9 12 27 27 191.05 19 85.10 -1609262498183337272733333347270 18 22 12 12 18 18 18 39 201.05 18 87.20 -1609272498195040405043532737340 48 27 27 48 32 56 12 22 341.36 17 85.90 -1609282498204343304340505740346 32 32 15 32 27 48 67 27 351.46 22 84.80 -1609292498213747504737504030338 22 39 48 39 22 48 27 15 321.36 12 83.00 -1609302498223733303323304733266 22 18 15 18 9 15 39 18 190.00 5 80.80 -1610012498233040232320304030236 15 27 9 9 7 15 27 15 160.94 0 81.20 -1610022498243030232333234333238 15 15 9 9 18 9 32 18 160.94 6 82.40 -161003249825203333 717233330196 7 18 18 3 6 9 18 15 120.73 27 87.90 -1610042498263747303737233037278 22 39 15 22 22 9 15 22 211.15 30 93.10 -1610052498273333272020231723196 18 18 12 7 7 9 6 9 110.63 30 99.30 -1610062499 12017 7 0 3172013 97 7 6 3 0 2 6 7 5 40.21 41101.40 -1610072499 22313 7 3 7172010100 9 5 3 2 3 6 7 4 50.21 43104.00 -1610082499 32033172010 71017134 7 18 6 7 4 3 4 6 70.31 44104.10 -1610092499 42013131017 71710107 7 5 5 4 6 3 6 4 50.21 48104.20 -1610102499 530272310102727 7161 15 12 9 4 4 12 12 3 90.52 49101.60 -1610112499 6 3 0 3 7 3 0 3 7 26 2 0 2 3 2 0 2 3 20.00 46 98.80 -1610122499 7 7 3 7 3 3101030 73 3 2 3 2 2 4 4 15 40.21 29 97.20 -1610132499 82730404347606050357 12 15 27 32 39 80 80 48 421.57 30 94.80 -1610142499 9534040231717 710207 56 27 27 9 6 6 3 4 170.94 31 92.30 -1610152499102323172017272030177 9 9 6 7 6 12 7 15 90.52 26 84.40 -1610162499113017272730234737238 15 6 12 12 15 9 39 22 160.94 20 80.40 -1610172499123330374020303337260 18 15 22 27 7 15 18 22 181.05 20 75.60 -1610182499133030302013101023166 15 15 15 7 5 4 4 9 90.52 20 76.80 -16101924991427201013 71310 7107 12 7 4 5 3 5 4 3 50.21 23 75.80 -16102024991513 0 3 0 3 017 7 43 5 0 2 0 2 0 6 3 20.00 12 74.00 -161021249916 3 7 3 0 0 0 0 3 16 2 3 2 0 0 0 0 2 10.00 20 77.10 -16102224991713 3 710 7132017 90 5 2 3 4 3 5 7 6 40.21 19 76.70 -161023249918 720231317172030147 3 7 9 5 6 6 7 15 70.42 11 76.00 -1610242499193730272037271733228 22 15 12 7 22 12 6 18 140.84 10 74.50 -1610252499204040334763634757390 27 27 18 39 94 94 39 67 511.67 12 76.90 -1610262499214347375740534743367 32 39 22 67 27 56 39 32 391.46 18 77.10 -1610272499224340333030433730286 32 27 18 15 15 32 22 15 221.15 17 77.80 -1610282499232323332327302740226 9 9 18 9 12 15 12 27 140.84 25 78.20 -1610292499244750403333232023269 39 48 27 18 18 9 7 9 221.15 16 78.00 -1610302499254033272337333020243 27 18 12 9 22 18 15 7 160.94 9 75.10 -1610312499262330232313302723192 9 15 9 9 5 15 12 9 100.00 9 77.10 -1611012499271720172730201333177 6 7 6 12 15 7 5 18 100.52 8 75.40 -1611022500 14017102333231337196 27 6 4 9 18 9 5 22 120.73 0 74.80 -1611032500 23027373723272040241 15 12 22 22 9 12 7 27 160.94 21 74.40 -1611042500 3231310 7 0 0 7 7 67 9 5 4 3 0 0 3 3 30.10 18 75.40 -1611052500 4 7 3 7 3 0 0 3 3 26 3 2 3 2 0 0 2 2 20.00 18 75.30 -1611062500 510 3131020 31013 82 4 2 5 4 7 2 4 5 40.10 16 74.90 -1611072500 617 313 7 7 7 0 0 54 6 2 5 3 3 3 0 0 30.00 8 75.10 -1611082500 7 3 0 7 710 3 310 43 2 0 3 3 4 2 2 4 20.00 0 75.40 -1611092500 8 0 0171717102323107 0 0 6 6 6 4 9 9 50.21 0 78.30 -1611102500 91717202330432727204 6 6 7 9 15 32 12 12 120.73 18 78.60 -1611112500104013171713201330163 27 5 6 6 5 7 5 15 100.52 21 76.80 -1611122500112733233733303033246 12 18 9 22 18 15 15 18 160.94 9 76.80 -1611132500123733333330304330269 22 18 18 18 15 15 32 15 191.05 26 76.20 -1611142500131317202027271730171 5 6 7 7 12 12 6 15 90.52 23 75.60 -161115250014302013172313 7 3126 15 7 5 6 9 5 3 2 60.31 21 74.90 -1611162500151010 7 3 0 71717 71 4 4 3 2 0 3 6 6 40.10 18 79.10 -16111725001613 3 3 7 0 310 7 46 5 2 2 3 0 2 4 3 30.00 21 76.80 -16111825001720 0 0 0 010 3 3 36 7 0 0 0 0 4 2 2 20.00 21 75.80 -161119250018 3 0 0 0 3 710 3 26 2 0 0 0 2 3 4 2 20.00 10 74.90 -161120250019 3 0 7 7 7 3 310 40 2 0 3 3 3 2 2 4 20.00 5 74.60 -161121250020 713 7 710132023100 3 5 3 3 4 5 7 9 50.21 0 73.10 -16112225002110 7132020302740167 4 3 5 7 7 15 12 27 100.63 0 75.40 -1611232500223730271010132317167 22 15 12 4 4 5 9 6 100.52 7 75.70 -1611242500233323303047304033266 18 9 15 15 39 15 27 18 201.05 9 77.00 -1611252500244050473043374023310 27 48 39 15 32 22 27 9 271.26 9 78.80 -1611262500252723232017302320183 12 9 9 7 6 15 9 7 90.52 16 79.10 -1611272500261727232323 71720157 6 12 9 9 9 3 6 7 80.42 21 80.40 -1611282500271717171017272023148 6 6 6 4 6 12 7 9 70.42 32 82.90 -1611292501 11710 7 7 7 71323 91 6 4 3 3 3 3 5 9 40.21 35 83.10 -1611302501 2101013 7 0101317 80 4 4 5 3 3 4 5 6 40.00 43 82.13 -1612012501 3 717 7 3 0 0 3 3 40 3 6 3 2 0 0 2 2 20.00 41 82.10 -1612022501 4 310 7 7 310 7 3 50 2 4 3 3 2 4 3 2 30.10 43 82.00 -1612032501 5 3 0 3 0 0 310 3 22 2 0 2 0 0 2 4 2 20.00 41 82.20 -1612042501 6 0 7 0 0 0 0 0 7 14 0 3 0 0 0 0 0 3 10.00 27 80.00 -1612052501 717 7 0 0 710 713 61 6 3 0 0 3 4 3 5 30.10 24 80.30 -1612062501 8 7 7102030131323123 3 3 4 7 15 5 5 9 60.31 23 77.40 -1612072501 9 317301713203027157 2 6 15 6 5 7 15 12 80.52 13 74.90 -1612082501103340272727404340277 18 27 12 12 12 27 32 27 211.15 9 72.60 -1612092501113720303727374047275 22 7 15 22 12 22 27 39 211.15 14 70.70 -1612102501123730233030232727227 22 15 9 15 15 9 12 12 140.84 0 70.00 -1612112501133037202723273013207 15 22 7 12 9 12 15 5 120.73 0 69.20 -161212250114202313 3 317 713 99 7 9 5 2 2 6 3 5 50.21 9 68.60 -16121325011510 7 3 7 7 7 310 54 4 3 2 3 3 3 2 4 30.10 9 69.00 -16121425011610 3 713 3 310 7 56 4 2 3 5 2 2 4 3 30.10 15 70.10 -161215250117 0 0 3 7 0 3 7 7 27 0 0 2 3 0 2 3 3 20.00 8 70.20 -161216250118 7 3 0 0 0 0 3 7 20 3 2 0 0 0 0 2 3 10.00 0 70.30 -161217250119 3 0 3 710132330 89 2 0 2 3 4 5 9 15 50.21 9 69.80 -1612182501203023201313131310135 15 9 7 5 5 5 5 4 70.31 23 70.00 -16121925012110171310 71017 7 91 4 6 5 4 3 4 6 3 40.21 14 70.50 -16122025012210101013 717 727101 4 4 4 5 3 6 3 12 50.21 17 72.50 -1612212501232017132733574340250 7 6 5 12 18 67 32 27 221.15 21 72.60 -1612222501244343333030273327266 32 32 18 15 15 12 18 12 191.05 11 72.40 -1612232501252737233027334037254 12 22 9 15 12 18 27 22 170.94 0 71.30 -1612242501262727271730302023201 12 12 12 6 15 15 7 9 110.63 0 70.70 -1612252501273033173737374027258 15 18 6 22 22 22 27 12 181.05 0 70.10 -1612262502 14330303033332330252 32 15 15 15 18 18 9 15 170.94 0 71.40 -1612272502 23727202020102023177 22 12 7 7 7 4 7 9 90.52 14 71.30 -1612282502 31720 310 3171313 96 6 7 2 4 2 6 5 5 50.21 5 70.90 -1612292502 42010 3101013 3 3 72 7 4 2 4 4 5 2 2 40.10 7 70.90 -1612302502 5 310 3 3 3 3 310 38 2 4 2 2 2 2 2 4 20.00 8 71.20 -1612312502 6 320172733303020 54 2 7 6 12 18 15 15 7 100.63 5 71.10 +1601012488195747473013 71717235 67 39 39 15 5 3 6 6 221.15 25 95.10 +1601022488203023272317171313163 15 9 12 9 6 6 5 5 80.52 27 96.60 +160103248821 713201010171027114 3 5 7 4 4 6 4 12 60.31 35 98.50 +160104248822 31313 7 31713 7 76 2 5 5 3 2 6 5 3 40.10 48 92.20 +160105248823 3131317 7172017107 2 5 5 6 3 6 7 6 50.21 24 92.10 +1601062488244727273027232330234 39 12 12 15 12 9 9 15 150.94 21 96.90 +16010724882537272333272717 7198 22 12 9 18 12 12 6 3 120.73 42 99.90 +160108248826 717132327 71313120 3 6 5 9 12 3 5 5 60.31 59104.90 +16010924882717 7101013131010 90 6 3 4 4 5 5 4 4 40.21 67103.50 +1601102489 12313102317132020139 9 5 4 9 6 5 7 7 60.31 62105.40 +1601112489 21327231317273737194 5 12 9 5 6 12 22 22 120.73 32104.50 +1601122489 33320271720172730191 18 7 12 6 7 6 12 15 100.63 27102.00 +1601132489 43737201723202710191 22 22 7 6 9 7 12 4 110.63 26100.70 +1601142489 51320232313171327149 5 7 9 9 5 6 5 12 70.42 28 99.90 +1601152489 617201010 3 71010 87 6 7 4 4 2 3 4 4 40.10 31100.10 +1601162489 7 3 7 71010 3 3 3 46 2 3 3 4 4 2 2 2 30.00 30 96.70 +1601172489 8 3 013 7 7 7 7 3 47 2 0 5 3 3 3 3 2 30.00 40 97.40 +1601182489 9 3 0 0 3 713 727 60 2 0 0 2 3 5 3 12 30.10 37 97.40 +160119248910432723271013 713163 32 12 9 12 4 5 3 5 100.63 45 94.40 +1601202489111023304043474340276 4 9 15 27 32 39 32 27 231.15 43 97.20 +1601212489123757473027373743315 22 67 39 15 12 22 22 32 291.36 44100.70 +1601222489133333302717132723203 18 18 15 12 6 5 12 9 120.73 46 97.30 +1601232489141730371727302010188 6 15 22 6 12 15 7 4 110.63 43 95.80 +160124248915272317 713233713160 12 9 6 3 5 9 22 5 90.52 33100.60 +160125248916 7 3 7 0 0 0 0 0 17 3 2 3 0 0 0 0 0 10.00 46104.30 +160126248917 7 3 710 7101710 71 3 2 3 4 3 4 6 4 40.10 48111.30 +16012724891813231013 7 7 3 7 83 5 9 4 5 3 3 2 3 40.10 57109.30 +160128248919 7 3232310101013 99 3 2 9 9 4 4 4 5 50.21 53106.60 +160129248920 71310 7 7 7 7 7 65 3 5 4 3 3 3 3 3 30.10 44103.70 +160130248921 3 0 3 3 0 3 310 25 2 0 2 2 0 2 2 4 20.00 25102.00 +160131248922131723232317 717140 5 6 9 9 9 6 3 6 70.00 24 98.30 +16020124892327332323 0 3 0 3112 12 18 9 9 0 2 0 2 60.31 30 97.30 +160202248924 7 713 713202027114 3 3 5 3 5 7 7 12 60.31 36 99.10 +160203248925404327 7 710 7 7148 27 32 12 3 3 4 3 3 110.63 57108.90 +160204248926 3 3131723171310 99 2 2 5 6 9 6 5 4 50.21 75119.80 +1602052489272717172023201717158 12 6 6 7 9 7 6 6 70.00 71125.00 +1602062490 11323131310171713119 5 9 5 5 4 6 6 5 50.31 54120.00 +1602072490 220 3 71317332020133 7 2 3 5 6 18 7 7 70.31 61120.00 +1602082490 350374020 7 7 7 7175 48 22 27 7 3 3 3 3 140.84 61112.10 +1602092490 42010133023101023139 7 4 5 15 9 4 4 9 70.42 58114.10 +1602102490 527131010 0 3 713 83 12 5 4 4 0 2 3 5 40.21 52109.20 +1602112490 62013171017171333140 7 5 6 4 6 6 5 18 70.42 59109.80 +1602122490 73323203327201720193 18 9 7 18 12 7 6 7 100.63 43109.30 +1602132490 820232717 7 7 3 7111 7 9 12 6 3 3 2 3 60.31 26107.50 +1602142490 92023202320301710163 7 9 7 9 7 15 6 4 80.42 32105.40 +1602152490102323271713 71040160 9 9 12 6 5 3 4 27 90.52 34104.70 +1602162490114027374350475047341 27 12 22 32 48 39 48 39 331.36 29101.50 +1602172490125030403337334053316 48 15 27 18 22 18 27 56 291.36 26 97.50 +1602182490134047374330374330307 27 39 22 32 15 22 32 15 261.26 25 92.70 +1602192490143030233327333317226 15 15 9 18 12 18 18 6 140.84 32 91.90 +160220249015231317 710 7 3 7 87 9 5 6 3 4 3 2 3 40.21 36 97.80 +1602212490161017 7 0 3 31313 66 4 6 3 0 2 2 5 5 30.10 32 93.50 +160222249017 0 0 0 7 710 310 37 0 0 0 3 3 4 2 4 20.00 23 93.50 +16022324901820 3 3 7 7 71727 91 7 2 2 3 3 3 6 12 50.21 25 89.10 +1602242490192313131017 71013106 9 5 5 4 6 3 4 5 50.21 23 86.10 +16022524902017171310 3 3 717 87 6 6 5 4 2 2 3 6 40.10 18 89.90 +160226249021302313 710 710 3103 15 9 5 3 4 3 4 2 60.31 33 87.20 +160227249022 3101310 0 3 310 52 2 4 5 4 0 2 2 4 30.10 18 88.60 +16022824902310 01010 7 0 310 50 4 0 4 4 3 0 2 4 30.00 25 91.50 +16022924902420 0 3 7 7 0 310 50 7 7 2 3 3 3 2 4 40.00 31 89.30 +160301249025272013131313 723129 12 7 5 5 5 5 3 9 60.31 47 95.10 +1603022490262310 7202027 7 7121 9 4 3 7 7 12 3 3 60.31 54 96.50 +1603032490272023202017 7 313123 7 9 7 7 6 3 2 5 60.31 53 97.10 +1603042491 12713 0 7 0 3 0 3 53 12 5 0 3 0 2 0 2 30.10 77 98.90 +1603052491 2 3 3131317 3 0 3 55 2 2 5 5 6 2 0 2 30.10 57 94.70 +1603062491 3 310202023475763243 2 4 7 7 9 39 67 94 291.36 54 94.10 +1603072491 44747332327333340283 39 39 18 9 12 18 18 27 221.15 54 92.80 +1603082491 527201717201320 7141 12 7 6 6 7 5 7 3 70.31 43 94.20 +1603092491 61720131317131017120 6 7 5 5 6 5 4 6 60.21 63 96.00 +1603102491 72323171310101723136 9 9 6 5 4 4 6 9 60.31 55 93.70 +1603112491 81723273350273327237 6 9 12 18 48 12 18 12 170.94 35 93.00 +1603122491 92727171710302710165 12 12 6 6 4 15 12 4 90.52 48 93.90 +160313249110 717 7 7 0 0 0 7 45 3 6 3 3 0 0 0 3 20.00 39 91.50 +16031424911117101310 7203347157 6 4 5 4 3 7 18 39 110.63 48 92.40 +16031524911237404333 7274737271 22 27 32 18 3 12 39 22 221.15 41 93.10 +1603162491134723272727132743234 39 9 12 12 12 5 12 32 170.94 54 90.10 +1603172491144747373320302727268 39 39 22 18 7 15 12 12 201.05 50 90.70 +1603182491151317231720202020150 5 6 9 6 7 7 7 7 70.31 32 89.50 +1603192491161727333730332010207 6 12 18 22 15 18 7 4 130.73 25 88.60 +1603202491171327101313303317156 5 12 4 5 5 15 18 6 90.52 25 86.90 +1603212491181717171717171323138 6 6 6 6 6 6 5 9 60.31 23 88.20 +1603222491192317102010 0 317100 9 6 4 7 4 0 2 6 50.21 14 86.70 +1603232491201733331310 71327153 6 18 18 5 4 3 5 12 90.52 14 86.20 +160324249121231317101013 717110 9 5 6 4 4 5 3 6 50.21 24 86.00 +1603252491223017 713 7 7 3 3 87 15 6 3 5 3 3 2 2 50.21 23 85.10 +160326249123 0 3 3 3 3 3 310 28 0 2 2 2 2 2 2 4 20.00 22 85.10 +1603272491242723302720332320203 12 9 15 12 7 18 9 7 110.63 22 87.90 +1603282491252033 7 313102727140 7 18 3 2 5 4 12 12 80.42 21 87.40 +1603292491263030232317271013173 15 15 9 9 6 12 4 5 90.52 14 87.50 +1603302491273013132033203020179 15 5 5 7 18 7 15 7 100.63 12 83.60 +1603312492 1272710 7 7 7 313101 12 12 4 3 3 3 2 5 60.60 11 81.60 +1604012492 213 0 0 0 3 010 7 33 5 0 0 0 2 0 4 3 20.00 8 82.00 +1604022492 320 3 0 327473750187 7 2 0 2 12 39 22 48 160.94 8 81.50 +1604032492 440333023 7131737200 27 18 15 9 3 5 6 22 130.84 8 82.30 +1604042492 52327101013 3 310 99 9 12 4 4 5 2 2 4 50.21 27 83.50 +1604052492 61310 3 720102013 96 5 4 2 3 7 4 7 5 50.21 23 83.50 +1604062492 7201013202017 7 7114 7 4 5 7 7 6 3 3 50.21 14 87.20 +1604072492 820 7 713 7174353167 7 3 3 5 3 6 32 56 140.84 12 92.50 +1604082492 9402310 7 3 3 7 7100 27 9 4 3 2 2 3 3 70.31 18 98.60 +160409249210 3 0 0 3 310 0 3 22 2 0 0 2 2 4 0 2 20.00 17105.90 +1604102492111020271310 3 323109 4 7 12 5 4 2 2 9 60.31 23111.10 +160411249212 3 0 0 317301010 73 2 0 0 2 6 15 4 4 40.10 29117.20 +1604122492132323102033303743219 9 9 4 7 18 15 22 32 140.84 25111.90 +1604132492145037334040303327290 48 22 18 27 27 15 18 12 231.15 33108.80 +1604142492153330234337433330272 18 15 9 32 22 32 18 15 201.05 31111.80 +1604152492163717 0 713171313117 22 6 0 3 5 6 5 5 60.31 23113.20 +160416249217 7 7202320273333170 3 3 7 9 7 12 18 18 100.52 29114.00 +1604172492184040302023303727247 27 27 15 7 9 15 22 12 170.94 25102.90 +16041824921923131313 3 010 7 82 9 5 5 5 2 0 4 3 40.10 21 95.40 +160419249220 3 3 0 3 7 0 0 7 23 2 2 0 2 3 0 0 3 20.00 19 89.90 +160420249221 3131317 7 3 3 7 66 2 5 5 6 3 2 2 3 40.10 17 84.00 +160421249222 313 713 7131313 82 2 5 3 5 3 5 5 5 40.10 18 77.50 +1604222492232013101330402330179 7 5 4 5 15 27 9 15 110.63 15 77.50 +1604232492241323101720132743166 5 9 4 6 7 5 12 32 100.63 9 79.60 +1604242492251313171330403310169 5 5 6 5 15 27 18 4 110.63 26 82.80 +160425249226101317171313 7 3 93 4 5 6 6 5 5 3 2 40.21 31 82.90 +160426249227 710 71313 72023100 3 4 3 5 5 3 7 9 50.21 39 86.30 +1604272493 11017231727272017158 4 6 9 6 12 12 7 6 80.42 53 93.80 +1604282493 2171010 710 3 3 3 63 6 4 4 3 4 2 2 2 30.10 62 96.30 +1604292493 31010 0 0 3 0 7 7 37 4 4 0 0 2 0 3 3 20.00 56 93.80 +1604302493 4 310131313131310 88 2 4 5 5 5 5 5 4 40.00 61 95.40 +1605012493 52017172330334040220 7 6 6 9 15 18 27 27 140.84 60 93.60 +1605022493 65050202327334347293 48 48 7 9 12 18 32 39 271.26 57 91.30 +1605032493 73333231310171323165 18 18 9 5 4 6 5 9 90.52 49 91.50 +1605042493 817 7 0 71010 310 64 6 3 0 3 4 4 2 4 30.10 49 91.60 +1605052493 9 010172020201017114 0 4 6 7 7 7 4 6 50.21 41 88.70 +1605062493102317202330304030213 9 6 7 9 15 15 27 15 130.73 39 91.20 +1605072493113710132017201030157 22 4 5 7 6 7 4 15 90.52 23 89.70 +1605082493125363605053535060442 56 94 80 48 56 56 48 80 651.77 31 85.60 +1605092493136333273033274340296 94 18 12 15 18 12 32 27 281.26 36 90.20 +1605102493143037302330202320213 15 22 15 9 15 7 9 7 120.73 53 90.50 +1605112493152313 3 3 310 720 82 9 5 2 2 2 4 3 7 40.10 55 95.80 +16051224931610 7 710 7 0 713 61 4 3 3 4 3 0 3 5 30.10 59 93.90 +16051324931713 7171320132013116 5 3 6 5 7 5 7 5 50.21 54 95.40 +1605142493182317172320102333166 9 6 6 9 7 4 9 18 80.52 62103.40 +1605152493192720201733333313196 12 7 7 6 18 18 18 5 110.73 60110.80 +1605162493202330233030232713199 9 15 9 15 15 9 12 5 110.63 39104.30 +1605172493211720303027232727201 6 7 15 15 12 9 12 12 110.63 26105.60 +160518249322172317232010 310123 6 9 6 9 7 4 2 4 60.31 21104.70 +16051924932313 72317232017 7127 5 3 9 6 9 7 6 3 60.31 32101.20 +160520249324202013 710 3 717 97 7 7 5 3 4 2 3 6 50.21 32102.00 +1605212493252030432330332310212 7 15 32 9 15 18 9 4 140.84 12100.20 +160522249326132017272010 7 3117 5 7 6 12 7 4 3 2 60.31 20 99.80 +160523249327 3 71017 3 013 7 60 2 3 4 6 2 0 5 3 30.10 11 99.80 +1605242494 11313102310 3 7 7 86 5 5 4 9 4 2 3 3 40.21 17 96.70 +1605252494 2 310 010 7 3 3 0 36 2 4 0 4 3 2 2 0 20.00 23 96.10 +1605262494 3 0 3 3 3 3 71310 42 0 2 2 2 2 3 5 4 20.00 24 94.20 +1605272494 42723101720202730174 12 9 4 6 7 7 12 15 90.52 24 92.80 +1605282494 52727372017302327208 12 12 22 7 6 15 9 12 120.73 23 90.10 +1605292494 62013131710101727127 7 5 5 6 4 4 6 12 60.31 21 85.30 +1605302494 74027232010201320173 27 12 9 7 4 7 5 7 100.52 33 88.70 +1605312494 81713231313233033165 6 5 9 5 5 9 15 18 90.52 24 89.00 +1606012494 9201010 713131717107 7 4 4 3 5 5 6 6 50.21 28 88.40 +160602249410 7 7 3 7 3 7 0 7 41 3 3 2 3 2 3 0 3 20.00 9 87.70 +16060324941110 3 0 3 0 0 310 29 4 2 0 2 0 0 2 4 20.00 0 85.70 +160604249412 7 3 3 3 3 31313 48 3 2 2 2 2 2 5 5 30.10 7 82.40 +1606052494131320203350475347283 5 7 7 18 48 39 56 39 271.26 0 81.50 +1606062494144350334030173317263 32 48 18 27 15 6 18 6 211.15 0 80.80 +1606072494151713 72017203027151 6 5 3 7 6 7 15 12 80.42 13 80.80 +1606082494162320 7201717 3 7114 9 7 3 7 6 6 2 3 50.21 10 82.60 +16060924941720 7 3 310 3 7 7 60 7 3 2 2 4 2 3 3 30.10 13 87.80 +160610249418 310 3 717133030113 2 4 2 3 6 5 15 15 60.31 22 87.50 +1606112494193017171317202033167 15 6 6 5 6 7 7 18 90.52 30 90.90 +1606122494201717201723273320174 6 6 7 6 9 12 18 7 90.52 29 97.10 +16061324942127331317171013 7137 12 18 5 6 6 4 5 3 70.42 27 93.90 +1606142494222317131317235733196 9 6 5 5 6 9 67 18 160.94 26 90.40 +160615249423432020302723 710180 32 7 7 15 12 9 3 4 110.63 28 90.10 +1606162494241710132023171313126 6 4 5 7 9 6 5 5 60.31 19 91.00 +16061724942510172020232323 7143 4 6 7 7 9 9 9 3 70.31 27 89.40 +1606182494261723202323101317146 6 9 7 9 9 4 5 6 70.31 33 86.30 +160619249427201713 71313 7 3 93 7 6 5 3 5 5 3 2 40.21 34 87.90 +1606202495 1101010 3 7 31010 63 4 4 4 2 3 2 4 4 30.10 25 87.10 +1606212495 2 3 7 7 7 7 7 7 3 48 2 3 3 3 3 3 3 2 30.00 16 82.90 +1606222495 3 710 71020234333153 3 4 3 4 7 9 32 18 100.63 16 80.90 +1606232495 41730 7 710302733161 6 15 3 3 4 15 12 18 100.52 8 80.00 +1606242495 53330272020231723193 18 15 12 7 7 9 6 9 100.63 8 78.20 +1606252495 6231717 710102027131 9 6 6 3 4 4 7 12 60.31 0 79.60 +1606262495 71713131320272740170 6 5 5 5 7 12 12 27 100.63 0 79.20 +1606272495 8302323 710102023146 15 9 9 3 4 4 7 9 80.42 0 78.00 +1606282495 923201310171010 7110 9 7 5 4 6 4 4 3 50.21 0 75.50 +16062924951013 710 3 71017 7 74 5 3 4 2 3 4 6 3 40.10 0 76.00 +160630249511 3 7 3 7 3101310 56 2 3 2 3 2 4 5 4 30.00 0 74.00 +1607012495122717202013 7 0 3107 12 6 7 7 5 3 0 2 50.21 0 74.00 +160702249513 310 7 713 72737111 2 4 3 3 5 3 12 22 70.31 8 73.30 +1607032495143017131310232027153 15 6 5 5 4 9 7 12 80.42 13 74.80 +16070424951517172013 7 31317107 6 6 7 5 3 2 5 6 50.21 0 76.30 +1607052495161013 7 3 3 3 3 7 49 4 5 3 2 2 2 2 3 30.10 9 74.90 +160706249517 3 3 3 7 3 71027 63 2 2 2 3 2 3 4 12 40.10 9 79.70 +1607072495182327272333434340259 9 12 12 9 18 32 32 27 191.05 17 86.10 +1607082495193323333740373720260 18 9 18 22 27 22 22 7 181.05 29 90.00 +1607092495203020332333302320212 15 7 18 9 18 15 9 7 120.73 38 95.30 +1607102495212323172723132020166 9 9 6 12 9 5 7 7 80.42 34 97.60 +1607112495222023132020202727170 7 9 5 7 7 7 12 12 80.42 43 97.80 +1607122495233037404020172333240 15 22 27 27 7 6 9 18 160.94 41 95.50 +1607132495242720131717131020137 12 7 5 6 6 5 4 7 60.31 36100.00 +1607142495251723403317171720184 6 9 27 18 6 6 6 7 110.63 40 98.20 +1607152495262333272713231723186 9 18 12 12 5 9 6 9 100.63 48105.40 +1607162495272713131327131710133 12 5 5 5 12 5 6 4 70.31 42110.10 +1607172496 11313 71010101720100 5 5 3 4 4 4 6 7 50.21 27108.60 +1607182496 2 7 710 7 3 3 313 53 3 3 4 3 2 2 2 5 30.10 44110.60 +1607192496 310 3 3 3 7 7 350 86 4 2 2 2 3 3 2 48 80.42 41104.10 +1607202496 45343332020232310225 56 32 18 7 7 9 9 4 181.05 39111.50 +1607212496 5 7 310131023 320 89 3 2 4 5 4 9 2 7 40.21 36103.30 +1607222496 61010171720272020141 4 4 6 6 7 12 7 7 70.31 27 93.30 +1607232496 720272713 7 3 717121 7 12 12 5 3 2 3 6 60.31 19 88.90 +1607242496 817 7 71313334340173 6 3 3 5 5 18 32 27 120.73 9 84.80 +1607252496 93733273030302020227 22 18 12 15 15 15 7 7 140.84 0 75.90 +1607262496101013 7 3 710 713 70 4 5 3 2 3 4 3 5 40.10 0 75.90 +160727249611 7 7 0 0 3 3 720 47 3 3 0 0 2 2 3 7 20.00 0 73.80 +1607282496122733271717274030218 12 18 12 6 6 12 27 15 140.84 9 72.50 +1607292496133033302723202713203 15 18 15 12 9 7 12 5 120.73 11 72.60 +160730249614271710 7 7 7 710 92 12 6 4 3 3 3 3 4 50.21 14 73.10 +16073124961517 7 3 7 3 7 710 61 6 3 2 3 2 3 3 4 30.00 11 71.00 +16080124961613 7 3 0 3 31013 52 5 3 2 0 2 2 4 5 30.10 8 71.00 +1608022496171313132020374047203 5 5 5 7 7 22 27 39 150.84 8 77.10 +1608032496185040434740472723317 48 27 32 39 27 39 12 9 291.36 0 77.00 +1608042496193333272730332717227 18 18 12 12 15 18 12 6 140.84 11 78.50 +1608052496201337373730232333233 5 22 22 22 15 9 9 18 150.94 26 82.10 +1608062496212317233323231727186 9 6 9 18 9 9 6 12 100.52 27 85.50 +1608072496223717101327301327174 22 6 4 5 12 15 5 12 100.63 36 95.30 +16080824962333171713233323 7166 18 6 6 5 9 18 9 3 90.52 56 99.00 +1608092496241327173033271730194 5 12 6 15 18 12 6 15 110.63 50 94.90 +1608102496253327303320273030230 18 12 15 18 7 12 15 15 140.84 53 97.60 +16081124962617 7101713232330140 6 3 4 6 5 9 9 15 70.42 54 97.20 +1608122496273730202320171313173 22 15 7 9 7 6 5 5 100.52 50 97.30 +1608132497 1131010 710102010 90 5 4 4 3 4 4 7 4 40.21 40 92.90 +1608142497 210 3101017 310 3 66 4 2 4 4 6 2 4 2 40.10 41 89.40 +1608152497 3 7 313 7 3 7 010 50 3 2 5 3 2 3 0 4 30.00 44 89.80 +1608162497 4 3 3 7 71310 710 60 2 2 3 3 5 4 3 4 30.00 56 88.00 +1608172497 52330171013 31727140 9 15 6 4 5 2 6 12 70.42 40 84.90 +1608182497 6173010 713 7 717108 6 15 4 3 5 3 3 6 60.31 34 84.40 +1608192497 7 7 0131010131010 73 3 0 5 4 4 5 4 4 40.10 32 82.70 +1608202497 8171313 7 3 0 0 3 56 6 5 5 3 2 0 0 2 30.10 12 80.00 +1608212497 9 3 3 71027371730134 2 2 3 4 12 22 6 15 80.42 9 78.40 +16082224971013 710 3 3 71013 66 5 3 4 2 2 3 4 5 40.10 21 81.80 +1608232497111317 72333304747217 5 6 3 9 18 15 39 39 170.94 33 83.10 +1608242497125027173030172033224 48 12 6 15 15 6 7 18 160.94 34 79.70 +1608252497132010232720232333179 7 4 9 12 7 9 9 18 90.52 33 80.30 +1608262497142713 3 310201717110 12 5 2 2 4 7 6 6 60.21 35 83.60 +1608272497151723 717 7 3 7 3 84 6 9 3 6 3 2 3 2 40.10 41 85.60 +160828249716 3 3 3 7 7 0 7 3 33 2 2 2 3 3 0 3 2 20.00 44 87.10 +16082924971710 3 31317172023106 4 2 2 5 6 6 7 9 50.21 48 89.50 +1608302497182723201733434040243 12 9 7 6 18 32 27 27 170.94 50102.30 +16083124971917 710 3 7 71727 95 6 3 4 2 3 3 6 12 90.00 55 99.30 +1609012497203737403037304350304 22 22 27 15 22 15 32 48 251.26 54 96.90 +1609022497215750333343402347326 67 48 18 18 32 27 9 39 321.36 46 96.30 +1609032497223750474040434347347 22 48 39 27 27 32 32 39 331.36 45100.70 +1609042497234333373333374033289 32 18 22 18 18 22 27 18 221.15 34 98.00 +1609052497242733272017304023217 12 18 12 7 6 15 27 9 130.84 21 95.30 +1609062497252330302323233723212 9 15 15 9 9 9 22 9 120.73 29 93.90 +1609072497263027132030301713180 15 12 5 7 15 15 6 5 100.63 41 94.40 +1609082497273033302723172017197 15 18 15 12 9 6 7 6 110.63 36 95.90 +1609092498 117 3 7 0 7 3 713 57 6 2 3 0 3 2 3 5 30.10 54 92.30 +1609102498 2101313 3 0 0 717 63 4 5 5 2 0 0 3 6 30.10 55 94.30 +1609112498 3 7 3 7 7101010 7 61 3 2 3 3 4 4 4 3 30.10 46 87.50 +1609122498 4201710 713 3 313 86 7 6 4 3 5 2 2 5 40.10 40 87.50 +1609132498 520101010 3 3 310 69 7 4 4 4 2 2 2 4 40.10 26 87.00 +1609142498 61317131723172323146 5 6 5 6 9 6 9 9 70.31 19 86.20 +1609152498 727231710 7 3 713107 12 9 6 4 3 2 3 5 60.21 15 85.30 +1609162498 8 0 0 0 3 31013 7 36 0 0 0 2 2 4 5 3 20.00 9 84.50 +1609172498 913 3 017 3 0 013 49 5 2 0 6 2 0 0 5 20.00 9 81.00 +1609182498101710132320201310126 6 4 5 9 7 7 5 4 60.31 26 83.80 +16091924981113 7232323201330152 5 3 9 9 9 7 5 15 80.42 44 83.30 +1609202498124340333717232323239 32 27 18 22 6 9 9 9 160.94 37 85.20 +16092124981340202027 7 01010134 27 7 7 12 3 0 4 4 80.42 35 86.10 +160922249814201013 3 3 0 3 3 55 7 4 5 2 2 0 2 2 30.10 25 85.70 +160923249815 31310 3 3 3 310 48 2 5 4 2 2 2 2 4 30.10 41 86.10 +160924249816 3 3 3 710 31320 62 2 2 2 3 4 2 5 7 30.10 38 85.40 +1609252498173743133323274040256 22 32 5 18 9 12 27 27 191.05 19 85.10 +1609262498183337272733333347270 18 22 12 12 18 18 18 39 201.05 18 87.20 +1609272498195040405043532737340 48 27 27 48 32 56 12 22 341.36 17 85.90 +1609282498204343304340505740346 32 32 15 32 27 48 67 27 351.46 22 84.80 +1609292498213747504737504030338 22 39 48 39 22 48 27 15 321.36 12 83.00 +1609302498223733303323304733266 22 18 15 18 9 15 39 18 190.00 5 80.80 +1610012498233040232320304030236 15 27 9 9 7 15 27 15 160.94 0 81.20 +1610022498243030232333234333238 15 15 9 9 18 9 32 18 160.94 6 82.40 +161003249825203333 717233330196 7 18 18 3 6 9 18 15 120.73 27 87.90 +1610042498263747303737233037278 22 39 15 22 22 9 15 22 211.15 30 93.10 +1610052498273333272020231723196 18 18 12 7 7 9 6 9 110.63 30 99.30 +1610062499 12017 7 0 3172013 97 7 6 3 0 2 6 7 5 40.21 41101.40 +1610072499 22313 7 3 7172010100 9 5 3 2 3 6 7 4 50.21 43104.00 +1610082499 32033172010 71017134 7 18 6 7 4 3 4 6 70.31 44104.10 +1610092499 42013131017 71710107 7 5 5 4 6 3 6 4 50.21 48104.20 +1610102499 530272310102727 7161 15 12 9 4 4 12 12 3 90.52 49101.60 +1610112499 6 3 0 3 7 3 0 3 7 26 2 0 2 3 2 0 2 3 20.00 46 98.80 +1610122499 7 7 3 7 3 3101030 73 3 2 3 2 2 4 4 15 40.21 29 97.20 +1610132499 82730404347606050357 12 15 27 32 39 80 80 48 421.57 30 94.80 +1610142499 9534040231717 710207 56 27 27 9 6 6 3 4 170.94 31 92.30 +1610152499102323172017272030177 9 9 6 7 6 12 7 15 90.52 26 84.40 +1610162499113017272730234737238 15 6 12 12 15 9 39 22 160.94 20 80.40 +1610172499123330374020303337260 18 15 22 27 7 15 18 22 181.05 20 75.60 +1610182499133030302013101023166 15 15 15 7 5 4 4 9 90.52 20 76.80 +16101924991427201013 71310 7107 12 7 4 5 3 5 4 3 50.21 23 75.80 +16102024991513 0 3 0 3 017 7 43 5 0 2 0 2 0 6 3 20.00 12 74.00 +161021249916 3 7 3 0 0 0 0 3 16 2 3 2 0 0 0 0 2 10.00 20 77.10 +16102224991713 3 710 7132017 90 5 2 3 4 3 5 7 6 40.21 19 76.70 +161023249918 720231317172030147 3 7 9 5 6 6 7 15 70.42 11 76.00 +1610242499193730272037271733228 22 15 12 7 22 12 6 18 140.84 10 74.50 +1610252499204040334763634757390 27 27 18 39 94 94 39 67 511.67 12 76.90 +1610262499214347375740534743367 32 39 22 67 27 56 39 32 391.46 18 77.10 +1610272499224340333030433730286 32 27 18 15 15 32 22 15 221.15 17 77.80 +1610282499232323332327302740226 9 9 18 9 12 15 12 27 140.84 25 78.20 +1610292499244750403333232023269 39 48 27 18 18 9 7 9 221.15 16 78.00 +1610302499254033272337333020243 27 18 12 9 22 18 15 7 160.94 9 75.10 +1610312499262330232313302723192 9 15 9 9 5 15 12 9 100.00 9 77.10 +1611012499271720172730201333177 6 7 6 12 15 7 5 18 100.52 8 75.40 +1611022500 14017102333231337196 27 6 4 9 18 9 5 22 120.73 0 74.80 +1611032500 23027373723272040241 15 12 22 22 9 12 7 27 160.94 21 74.40 +1611042500 3231310 7 0 0 7 7 67 9 5 4 3 0 0 3 3 30.10 18 75.40 +1611052500 4 7 3 7 3 0 0 3 3 26 3 2 3 2 0 0 2 2 20.00 18 75.30 +1611062500 510 3131020 31013 82 4 2 5 4 7 2 4 5 40.10 16 74.90 +1611072500 617 313 7 7 7 0 0 54 6 2 5 3 3 3 0 0 30.00 8 75.10 +1611082500 7 3 0 7 710 3 310 43 2 0 3 3 4 2 2 4 20.00 0 75.40 +1611092500 8 0 0171717102323107 0 0 6 6 6 4 9 9 50.21 0 78.30 +1611102500 91717202330432727204 6 6 7 9 15 32 12 12 120.73 18 78.60 +1611112500104013171713201330163 27 5 6 6 5 7 5 15 100.52 21 76.80 +1611122500112733233733303033246 12 18 9 22 18 15 15 18 160.94 9 76.80 +1611132500123733333330304330269 22 18 18 18 15 15 32 15 191.05 26 76.20 +1611142500131317202027271730171 5 6 7 7 12 12 6 15 90.52 23 75.60 +161115250014302013172313 7 3126 15 7 5 6 9 5 3 2 60.31 21 74.90 +1611162500151010 7 3 0 71717 71 4 4 3 2 0 3 6 6 40.10 18 79.10 +16111725001613 3 3 7 0 310 7 46 5 2 2 3 0 2 4 3 30.00 21 76.80 +16111825001720 0 0 0 010 3 3 36 7 0 0 0 0 4 2 2 20.00 21 75.80 +161119250018 3 0 0 0 3 710 3 26 2 0 0 0 2 3 4 2 20.00 10 74.90 +161120250019 3 0 7 7 7 3 310 40 2 0 3 3 3 2 2 4 20.00 5 74.60 +161121250020 713 7 710132023100 3 5 3 3 4 5 7 9 50.21 0 73.10 +16112225002110 7132020302740167 4 3 5 7 7 15 12 27 100.63 0 75.40 +1611232500223730271010132317167 22 15 12 4 4 5 9 6 100.52 7 75.70 +1611242500233323303047304033266 18 9 15 15 39 15 27 18 201.05 9 77.00 +1611252500244050473043374023310 27 48 39 15 32 22 27 9 271.26 9 78.80 +1611262500252723232017302320183 12 9 9 7 6 15 9 7 90.52 16 79.10 +1611272500261727232323 71720157 6 12 9 9 9 3 6 7 80.42 21 80.40 +1611282500271717171017272023148 6 6 6 4 6 12 7 9 70.42 32 82.90 +1611292501 11710 7 7 7 71323 91 6 4 3 3 3 3 5 9 40.21 35 83.10 +1611302501 2101013 7 0101317 80 4 4 5 3 3 4 5 6 40.00 43 82.13 +1612012501 3 717 7 3 0 0 3 3 40 3 6 3 2 0 0 2 2 20.00 41 82.10 +1612022501 4 310 7 7 310 7 3 50 2 4 3 3 2 4 3 2 30.10 43 82.00 +1612032501 5 3 0 3 0 0 310 3 22 2 0 2 0 0 2 4 2 20.00 41 82.20 +1612042501 6 0 7 0 0 0 0 0 7 14 0 3 0 0 0 0 0 3 10.00 27 80.00 +1612052501 717 7 0 0 710 713 61 6 3 0 0 3 4 3 5 30.10 24 80.30 +1612062501 8 7 7102030131323123 3 3 4 7 15 5 5 9 60.31 23 77.40 +1612072501 9 317301713203027157 2 6 15 6 5 7 15 12 80.52 13 74.90 +1612082501103340272727404340277 18 27 12 12 12 27 32 27 211.15 9 72.60 +1612092501113720303727374047275 22 7 15 22 12 22 27 39 211.15 14 70.70 +1612102501123730233030232727227 22 15 9 15 15 9 12 12 140.84 0 70.00 +1612112501133037202723273013207 15 22 7 12 9 12 15 5 120.73 0 69.20 +161212250114202313 3 317 713 99 7 9 5 2 2 6 3 5 50.21 9 68.60 +16121325011510 7 3 7 7 7 310 54 4 3 2 3 3 3 2 4 30.10 9 69.00 +16121425011610 3 713 3 310 7 56 4 2 3 5 2 2 4 3 30.10 15 70.10 +161215250117 0 0 3 7 0 3 7 7 27 0 0 2 3 0 2 3 3 20.00 8 70.20 +161216250118 7 3 0 0 0 0 3 7 20 3 2 0 0 0 0 2 3 10.00 0 70.30 +161217250119 3 0 3 710132330 89 2 0 2 3 4 5 9 15 50.21 9 69.80 +1612182501203023201313131310135 15 9 7 5 5 5 5 4 70.31 23 70.00 +16121925012110171310 71017 7 91 4 6 5 4 3 4 6 3 40.21 14 70.50 +16122025012210101013 717 727101 4 4 4 5 3 6 3 12 50.21 17 72.50 +1612212501232017132733574340250 7 6 5 12 18 67 32 27 221.15 21 72.60 +1612222501244343333030273327266 32 32 18 15 15 12 18 12 191.05 11 72.40 +1612232501252737233027334037254 12 22 9 15 12 18 27 22 170.94 0 71.30 +1612242501262727271730302023201 12 12 12 6 15 15 7 9 110.63 0 70.70 +1612252501273033173737374027258 15 18 6 22 22 22 27 12 181.05 0 70.10 +1612262502 14330303033332330252 32 15 15 15 18 18 9 15 170.94 0 71.40 +1612272502 23727202020102023177 22 12 7 7 7 4 7 9 90.52 14 71.30 +1612282502 31720 310 3171313 96 6 7 2 4 2 6 5 5 50.21 5 70.90 +1612292502 42010 3101013 3 3 72 7 4 2 4 4 5 2 2 40.10 7 70.90 +1612302502 5 310 3 3 3 3 310 38 2 4 2 2 2 2 2 4 20.00 8 71.20 +1612312502 6 320172733303020 54 2 7 6 12 18 15 15 7 100.63 5 71.10 diff --git a/RMextract/pyiriplas/kp2017 b/RMextract/pyiriplas/kp2017 index 77e94c1..f37f588 100644 --- a/RMextract/pyiriplas/kp2017 +++ b/RMextract/pyiriplas/kp2017 @@ -1,365 +1,365 @@ -1701012502 73333272323271717200 18 18 12 9 9 12 6 6 110.63 8 70.10 -1701022502 8132320131320 3 7112 5 9 7 5 5 7 2 3 50.21 0 70.60 -1701032502 9 313233320302727176 2 5 9 18 7 15 12 12 100.63 0 71.00 -1701042502101313172020233330169 5 5 6 7 7 9 18 15 90.52 0 70.00 -1701052502113033202030333740243 15 18 7 7 15 18 22 27 160.94 0 70.90 -1701062502123333272323232330215 18 18 12 9 9 9 9 15 120.73 0 69.60 -1701072502133727302743373327261 22 12 15 12 32 22 18 12 181.05 0 69.70 -1701082502142320233727233340226 9 7 9 22 12 9 18 27 140.84 0 69.20 -1701092502153020132033301327186 15 7 5 7 18 15 5 12 100.63 0 70.00 -170110250216201717 3 7302323140 7 6 6 2 3 15 9 9 70.42 0 70.30 -170111250217232017 3 7202020130 9 7 6 2 3 7 7 7 60.31 0 72.00 -1701122502182023 0 3 0 31017 76 7 9 0 2 0 2 4 6 40.10 7 73.00 -1701132502191310 0 3 7131310 69 5 4 0 2 3 5 5 4 40.10 18 72.40 -170114250220101310 3 3 7 713 66 4 5 4 2 2 3 3 5 40.10 21 74.10 -17011525022123 71710 7 717 7 95 9 3 6 4 3 3 6 3 50.21 19 75.00 -170116250222 7 3 3 0 0 0 7 7 27 3 2 2 0 0 0 3 3 20.00 16 75.80 -17011725022310 3 3 3 317 7 3 49 4 2 2 2 2 6 3 2 30.10 22 76.10 -170118250224 723272330333733213 3 9 12 9 15 18 22 18 130.84 25 76.10 -1701192502253323272717171317174 18 9 12 12 6 6 5 6 90.52 22 77.00 -1701202502263027201320102027167 15 12 7 5 7 4 7 12 90.52 38 80.60 -1701212502273317171710173033174 18 6 6 6 4 6 15 18 100.63 52 83.40 -1701222503 13027231320131317156 15 12 9 5 7 5 5 6 80.42 49 84.00 -1701232503 2 3 310 3 7131717 73 2 2 4 2 3 5 6 6 40.10 41 81.50 -1701242503 317 7 3 3 3 0 7 7 47 6 3 2 2 2 0 3 3 30.00 29 79.70 -1701252503 420271013 3 0 010 83 7 12 4 5 2 0 0 4 40.10 32 82.50 -1701262503 5 0 0202330373327170 0 0 7 9 15 22 18 12 100.63 27 80.60 -1701272503 64340373333331320252 32 27 22 18 18 18 5 7 181.05 18 77.90 -1701282503 7232717 7 3102027134 9 12 6 3 2 4 7 12 70.31 20 76.10 -1701292503 820231310172013 7123 7 9 5 4 6 7 5 3 60.31 23 74.40 -1701302503 9 710101020201027114 3 4 4 4 7 7 4 12 60.31 23 74.70 -1701312503102727303330403743267 12 12 15 18 15 27 22 32 191.05 23 75.07 -1702012503114030303040473050297 27 15 15 15 27 39 15 48 251.26 27 73.90 -1702022503123337333027333740270 18 22 18 15 12 18 22 27 191.05 29 73.10 -1702032503133037402027333030247 15 22 27 7 12 18 15 15 160.94 23 73.00 -1702042503142730231720172023177 12 15 9 6 7 6 7 9 90.52 7 71.90 -1702052503152733272023303320213 12 18 12 7 9 15 18 7 120.73 7 70.60 -1702062503163027171723272333197 15 12 6 6 9 12 9 18 110.63 7 70.50 -1702072503172320 71723171717141 9 7 3 6 9 6 6 6 60.31 8 70.10 -17020825031810 0 7101717 717 85 4 0 3 4 6 6 3 6 40.10 0 71.10 -17020925031920131017 7202023130 7 5 4 6 3 7 7 9 60.31 14 71.50 -1702102503201710171320231323136 6 4 6 5 7 9 5 9 60.31 15 72.10 -1702112503213010 7 7 3 0 7 3 67 15 4 3 3 2 0 3 2 40.10 14 73.80 -170212250322 7 0 3 3 31017 7 50 3 0 2 2 2 4 6 3 30.00 12 74.30 -1702132503232010 3 7 3201010 83 7 4 2 3 2 7 4 4 40.10 12 73.00 -170214250324 3 0 0 0 0 0 310 16 2 0 0 0 0 0 2 4 10.00 11 72.70 -170215250325 0 0 7 0 3 313 7 33 0 0 3 0 2 2 5 3 20.00 16 73.00 -170216250326 71320 723302317140 3 5 7 3 9 15 9 6 70.42 8 72.20 -1702172503272033373723332740250 7 18 22 22 9 18 12 27 170.94 9 72.80 -1702182504 14040201710203033210 27 27 7 6 4 7 15 18 140.84 8 74.90 -1702192504 2303023 7132327 7160 15 15 9 3 5 9 12 3 90.52 16 76.40 -1702202504 3 727171717233017155 3 12 6 6 6 9 15 6 80.42 23 78.90 -1702212504 42017 7 3 3 3 017 70 7 6 3 2 2 2 0 6 40.10 18 80.70 -1702222504 533272323 7131310149 18 12 9 9 3 5 5 4 80.42 18 81.40 -1702232504 61723202020302330183 6 9 7 7 7 15 9 15 90.52 14 81.60 -1702242504 74333273737271727248 32 18 12 22 22 12 6 12 170.94 15 80.50 -1702252504 827231713 3 3 320109 12 9 6 5 2 2 2 7 60.31 21 78.50 -1702262504 9 7 7 0 3 3 0 0 3 23 3 3 0 2 2 0 0 2 20.00 22 77.50 -1702272504101013101310102727120 4 5 4 5 4 4 12 12 60.31 31 80.60 -17022825041130201313 7132023139 15 7 5 5 3 5 7 9 70.00 36 78.87 -1703012504123033274347434757327 15 18 12 32 39 32 39 67 321.36 39 79.30 -1703022504134743374747334323320 39 32 22 39 39 18 32 9 291.36 37 77.80 -1703032504143337403730402013250 18 22 27 22 15 27 7 5 181.05 27 76.70 -1703042504154040303027332743270 27 27 15 15 12 18 12 32 201.05 0 73.90 -1703052504162723272327274037231 12 9 12 9 12 12 27 22 140.84 8 71.60 -1703062504174030103337374740274 27 15 4 18 22 22 39 27 221.15 0 71.30 -1703072504182330332723302727220 9 15 18 12 9 15 12 12 130.73 0 70.60 -1703082504193313 72027203333186 18 5 3 7 12 7 18 18 110.63 0 69.60 -1703092504203323203327202320199 18 9 7 18 12 7 9 7 110.63 0 70.30 -170310250421203033302010 720170 7 15 18 15 7 4 3 7 100.52 0 70.00 -17031125042210 310 3 0 31333 75 4 2 4 2 0 2 5 18 50.21 0 69.10 -170312250423303313 720 7 7 7124 15 18 5 3 7 3 3 3 70.42 0 69.20 -170313250424 31310 3 3 0 0 3 35 2 5 4 2 2 0 0 2 20.00 0 69.50 -170314250425 717 7 713131010 84 3 6 3 3 5 5 4 4 40.10 0 68.80 -17031525042610131717 7 31333113 4 5 6 6 3 2 5 18 60.31 0 69.10 -1703162504273017 0 310 31013 86 15 6 0 2 4 2 4 5 50.21 0 69.70 -1703172505 1 31310 3 0 0 313 45 2 5 4 2 0 0 2 5 20.00 0 69.90 -1703182505 2 7 0 0 0 0 0 710 24 3 0 0 0 0 0 3 4 10.00 0 69.60 -1703192505 3 0 0 7 3 0 3 310 26 0 0 3 2 0 2 2 4 20.00 0 70.50 -1703202505 4 3 0 3 3 0 3 3 3 18 2 0 2 2 0 2 2 2 20.00 0 72.10 -1703212505 51033402330475040273 4 18 27 9 15 39 48 27 231.15 8 70.50 -1703222505 63733233337404343289 22 18 9 18 22 27 32 32 221.15 9 72.00 -1703232505 740332017 717 710151 27 18 7 6 3 6 3 4 90.52 9 71.50 -1703242505 8202313 31717 7 3103 7 9 5 2 6 6 3 2 50.21 9 71.90 -1703252505 9 013 3 7 7 7 313 53 0 5 2 3 3 3 2 5 30.10 11 73.70 -17032625051017 3 3 7 7 3 013 53 6 2 2 3 3 2 0 5 30.10 18 76.80 -1703272505112347475343506043366 9 39 39 56 32 48 80 32 421.57 33 82.50 -1703282505125350333730273033293 56 48 18 22 15 12 15 18 261.26 38 83.40 -1703292505133733373330401733260 22 18 22 18 15 27 6 18 181.05 33 83.10 -1703302505143343301730304043266 18 32 15 6 15 15 27 32 201.05 32 85.70 -1703312505154347433733374040320 32 39 32 22 18 22 27 27 270.00 40 84.07 -1704012505162723273023402723220 12 9 12 15 9 27 12 9 130.84 48100.90 -17040225051723201710202310 3126 9 7 6 4 7 9 4 2 60.31 57111.90 -170403250518 3 7 7131713 3 7 70 2 3 3 5 6 5 2 3 40.10 68107.90 -170404250519233747472313 727224 9 22 39 39 9 5 3 12 170.94 54 93.90 -1704052505201710201313171733140 6 4 7 5 5 6 6 18 70.42 36 84.70 -17040625052113 3 71323301313115 5 2 3 5 9 15 5 5 60.31 25 75.80 -17040725052230202017 7 72333157 15 7 7 6 3 3 9 18 80.52 16 74.10 -1704082505233330372320202343229 18 15 22 9 7 7 9 32 150.84 0 73.30 -170409250524404330232323 713202 27 32 15 9 9 9 3 5 140.84 0 74.70 -17041025052523 3 3 317 7 713 76 9 2 2 2 6 3 3 5 40.10 9 73.90 -1704112505261010233323203023172 4 4 9 18 9 7 15 9 90.52 9 74.90 -170412250527302010 7 0 0 0 3 70 15 7 4 3 0 0 0 2 40.10 13 71.80 -1704132506 1 7 7 3 0 7132013 70 3 3 2 0 3 5 7 5 40.10 16 73.90 -1704142506 23333232027202720203 18 18 9 7 12 7 12 7 110.63 12 73.30 -1704152506 3302020 3 7 710 7104 15 7 7 2 3 3 4 3 60.21 0 73.50 -1704162506 4 3 71010 0 3 710 50 2 3 4 4 0 2 3 4 30.00 0 75.00 -1704172506 5 3 313 310 3 710 52 2 2 5 2 4 2 3 4 30.10 0 75.80 -1704182506 617 7 3 710101727 98 6 3 2 3 4 4 6 12 50.21 16 86.40 -1704192506 730433013 7203027200 15 32 15 5 3 7 15 12 130.73 11 81.60 -1704202506 84357374033273027294 32 67 22 27 18 12 15 12 261.26 20 81.40 -1704212506 9 71010 720435347197 3 4 4 3 7 32 56 39 181.05 27 83.10 -1704222506105053505050474053393 48 56 48 48 48 39 27 56 461.57 21 84.50 -1704232506114040534350474343359 27 27 56 32 48 39 32 32 371.46 29 83.40 -1704242506123337333720333730260 18 22 18 22 7 18 22 15 181.05 32 81.10 -1704252506132723202330202020183 12 9 7 9 15 7 7 7 90.52 29 82.30 -1704262506142713231317232020156 12 5 9 5 6 9 7 7 80.42 27 80.60 -17042725061520232310 7 71717124 7 9 9 4 3 3 6 6 60.31 18 79.30 -170428250616131013 713101323102 5 4 5 3 5 4 5 9 50.21 25 79.10 -1704292506172010171310102020120 7 4 6 5 4 4 7 7 60.21 23 78.20 -17043025061813 7 713 7101717 91 5 3 3 5 3 4 6 6 40.00 16 78.87 -1705012506192317 0 3 0 31317 76 9 6 0 2 0 2 5 6 40.10 9 76.40 -170502250620 320 713 3 3 317 69 2 7 3 5 2 2 2 6 40.10 19 78.40 -17050325062110 3 3 71010 3 3 49 4 2 2 3 4 4 2 2 30.10 12 76.20 -170504250622 31313 3 7 31337 92 2 5 5 2 3 2 5 22 60.31 11 75.40 -1705052506233013 0 310 3 3 3 65 15 5 0 2 4 2 2 2 40.10 22 74.80 -17050625062410171010 7 31310 80 4 6 4 4 3 2 5 4 40.10 18 74.10 -17050725062513202313 7132720136 5 7 9 5 3 5 12 7 70.31 16 73.00 -17050825062620 71710 7101313 97 7 3 6 4 3 4 5 5 50.21 9 71.80 -170509250627131010 717171013 97 5 4 4 3 6 6 4 5 50.21 0 70.20 -1705102507 12013 0 023101323102 7 5 0 0 9 4 5 9 50.21 0 69.90 -1705112507 2132717 710101017111 5 12 6 3 4 4 4 6 60.21 0 70.50 -1705122507 31710232023101313129 6 4 9 7 9 4 5 5 60.31 5 70.40 -1705132507 4 313 3 7 7 71313 66 2 5 2 3 3 3 5 5 40.10 0 71.90 -1705142507 52013132723201723156 7 5 5 12 9 7 6 9 80.42 0 72.70 -1705152507 6 317233320233027176 2 6 9 18 7 9 15 12 100.52 0 72.20 -1705162507 7232317172713 717144 9 9 6 6 12 5 3 6 70.42 16 73.50 -1705172507 82017232017101323143 7 6 9 7 6 4 5 9 70.31 8 73.10 -1705182507 930333013 3101317149 15 18 15 5 2 4 5 6 90.52 15 73.90 -1705192507101723201020303330183 6 9 7 4 7 15 18 15 100.63 16 74.00 -1705202507113737403737403330291 22 22 27 22 22 27 18 15 221.15 21 74.20 -1705212507122727232017102020164 12 12 9 7 6 4 7 7 80.42 22 75.30 -1705222507132020132020232730173 7 7 5 7 7 9 12 15 90.52 34 76.30 -1705232507141330131017132023139 5 15 5 4 6 5 7 9 70.42 39 77.90 -1705242507151310 7 7 7 3 3 3 53 5 4 3 3 3 2 2 2 30.10 16 79.90 -170525250716 3 3 0 3 7 7 317 43 2 2 0 2 3 3 2 6 20.00 21 78.10 -17052625071710 3 3 7 0 3 7 3 36 4 2 2 3 0 2 3 2 20.00 18 82.40 -17052725071810 3 0 010272757134 4 2 0 0 4 12 12 67 130.73 16 84.10 -17052825071957675747332013 7301 67111 67 39 18 7 5 3 401.46 14 81.00 -170529250720 3 7 720403327 7144 2 3 3 7 27 18 12 3 90.52 9 77.90 -170530250721203010 7 3 3 3 7 83 7 15 4 3 2 2 2 3 50.21 0 75.70 -170531250722 013 3 310 7 7 7 50 0 5 2 2 4 3 3 3 00.00 0 78.20 -170601250723 3 7 7 313272327110 2 3 3 2 5 12 9 12 60.31 10 77.90 -1706022507241713 7 7 7 71010 78 6 5 3 3 3 3 4 4 40.10 18 80.40 -170603250725 3 3172033371310136 2 2 6 7 18 22 5 4 80.42 18 80.20 -170604250726 7 3 3 3 3 0 3 3 25 3 2 2 2 2 0 2 2 20.00 18 79.90 -170605250727 710 71023101017 94 3 4 3 4 9 4 4 6 50.21 22 81.80 -1706062508 1171710 710 7 7 7 82 6 6 4 3 4 3 3 3 40.10 18 77.60 -1706072508 2101313 3 710 317 76 4 5 5 2 3 4 2 6 40.10 11 77.80 -1706082508 313 7 3 313 7 710 63 5 3 2 2 5 3 3 4 30.10 10 76.20 -1706092508 423 7 3 3 3 3 3 7 52 9 3 2 2 2 2 2 3 30.10 0 76.00 -1706102508 51310 3 3 3 3 3 7 45 5 4 2 2 2 2 2 3 30.00 0 77.00 -1706112508 6 313201330473720183 2 5 7 5 15 39 22 7 130.73 0 76.60 -1706122508 71013 7 720172323120 4 5 3 3 7 6 9 9 60.31 0 77.50 -1706132508 8271710201020 7 7118 12 6 4 7 4 7 3 3 60.31 8 77.20 -1706142508 9 010132017171010 97 0 4 5 7 6 6 4 4 40.21 8 76.40 -1706152508101310 310 7 3 7 0 53 5 4 2 4 3 2 3 0 30.10 22 79.90 -170616250811 717373743373050258 3 6 22 22 32 22 15 48 211.15 22 75.80 -1706172508123730102023203330203 22 15 4 7 9 7 18 15 120.73 23 77.20 -1706182508133323202023132020172 18 9 7 7 9 5 7 7 90.52 21 77.30 -1706192508141320131713 3 0 3 82 5 7 5 6 5 2 0 2 40.10 19 76.00 -170620250815 310 7 3 710 3 0 43 2 4 3 2 3 4 2 0 20.00 21 76.90 -170621250816 0 3 3 7 7101320 63 0 2 2 3 3 4 5 7 30.10 25 76.20 -1706222508172010 3 3 3 32013 75 7 4 2 2 2 2 7 5 40.10 16 76.10 -17062325081810 3 710 3 72020 80 4 2 3 4 2 3 7 7 40.10 15 76.10 -1706242508191313172720172327157 5 5 6 12 7 6 9 12 80.42 17 76.60 -1706252508202017332317201320163 7 6 18 9 6 7 5 7 80.42 13 76.20 -1706262508212317102013132017133 9 6 4 7 5 5 7 6 60.31 16 76.20 -1706272508221713 7131010 710 87 6 5 3 5 4 4 3 4 40.10 14 76.60 -17062825082313171010 7 0 0 3 60 5 6 4 4 3 0 0 2 30.10 12 74.50 -170629250824 7172013 7 3 3 7 77 3 6 7 5 3 2 2 3 40.10 9 74.20 -170630250825 3 3 7 710 7 710 54 2 2 3 3 4 3 3 4 30.00 8 75.10 -1707012508261330201723273017177 5 15 7 6 9 12 15 6 90.52 9 73.10 -1707022508272727404327173033244 12 12 27 32 12 6 15 18 170.94 8 73.60 -1707032509 120201013 3 7 717 97 7 7 4 5 2 3 3 6 50.21 0 74.10 -1707042509 2 710 7 3 3 31013 56 3 4 3 2 2 2 4 5 30.10 0 74.20 -1707052509 3 7 3 0 3 3 3 3 7 29 3 2 0 2 2 2 2 3 20.00 0 75.50 -1707062509 4 7 7101013171330107 3 3 4 4 5 6 5 15 60.31 10 78.50 -1707072509 51713 3 3 7 71013 73 6 5 2 2 3 3 4 5 40.10 18 82.20 -1707082509 613 7 3 7 3 3 3 7 46 5 3 2 3 2 2 2 3 30.00 22 89.50 -1707092509 74730235020304033273 39 15 9 48 7 15 27 18 221.15 32 94.00 -1707102509 830301710 7101320137 15 15 6 4 3 4 5 7 70.42 31 98.20 -1707112509 91723271313231017143 6 9 12 5 5 9 4 6 70.42 27 94.10 -17071225091013 7 7 71010 7 7 68 5 3 3 3 4 4 3 3 40.10 43 93.20 -170713250911 7 7 3 310 3 713 53 3 3 2 2 4 2 3 5 30.10 41 95.30 -170714250912 3 7 3 3 7 7 3 7 40 2 3 2 2 3 3 2 3 20.00 37 97.00 -170715250913 710 3 3 3 7 710 50 3 4 2 2 2 3 3 4 30.10 22 94.60 -1707162509141717435357536047347 6 6 32 56 67 56 80 39 431.57 14 89.30 -1707172509153037374040531317267 15 22 22 27 27 56 5 6 221.15 14 88.40 -1707182509162327131013 7 313109 9 12 5 4 5 3 2 5 60.31 0 80.80 -170719250917 3 7 3 7 31010 7 50 2 3 2 3 2 4 4 3 30.10 0 75.50 -1707202509181010 7 713172727118 4 4 3 3 5 6 12 12 60.31 0 72.50 -1707212509194033231323301730209 27 18 9 5 9 15 6 15 130.73 0 71.60 -1707222509202720374017232023207 12 7 22 27 6 9 7 9 120.73 0 71.80 -1707232509213020232723232037203 15 7 9 12 9 9 7 22 110.63 0 72.80 -1707242509222023271723201333176 7 9 12 6 9 7 5 18 90.52 0 72.30 -1707252509232013202327202330176 7 5 7 9 12 7 9 15 90.52 0 72.00 -17072625092430203717201313 3153 15 7 22 6 7 5 5 2 90.52 0 70.70 -170727250925 710 7 71323 727101 3 4 3 3 5 9 3 12 50.21 0 70.50 -1707282509261310 71317202713120 5 4 3 5 6 7 12 5 60.31 0 71.60 -170729250927 7101310 710 3 7 67 3 4 5 4 3 4 2 3 40.10 0 72.10 -1707302510 11310 7 7 3 713 0 60 5 4 3 3 2 3 5 0 30.10 9 71.70 -1707312510 2 31010 7 71010 7 64 2 4 4 3 3 4 4 3 30.00 0 71.80 -1708012510 3 7 7131320 7 3 7 77 3 3 5 5 7 3 2 3 40.10 8 75.70 -1708022510 410 7 3 71713 710 74 4 3 2 3 6 5 3 4 40.10 9 76.60 -1708032510 5 3 7 31017334037150 2 3 2 4 6 18 27 22 100.63 9 77.30 -1708042510 62330374340403327273 9 15 22 32 27 27 18 12 201.05 9 76.30 -1708052510 72337272027333727231 9 22 12 7 12 18 22 12 140.84 9 76.30 -1708062510 82723204023132327196 12 9 7 27 9 5 9 12 110.63 8 75.60 -1708072510 9 713172013 7 3 7 87 3 5 6 7 5 3 2 3 40.10 8 74.80 -170808251010 7 7 7 7101317 7 75 3 3 3 3 4 5 6 3 40.10 8 73.00 -170809251011 3 3101010 71013 66 2 2 4 4 4 3 4 5 40.10 8 73.40 -170810251012 3 7101320 7 313 76 2 3 4 5 7 3 2 5 40.10 9 73.00 -1708112510131313101313132717119 5 5 4 5 5 5 12 6 60.31 8 71.70 -1708122510142730171313 73027164 12 15 6 5 5 3 15 12 90.52 7 72.20 -1708132510152317171713131317130 9 6 6 6 5 5 5 6 60.31 7 70.00 -1708142510162010 31013101313 92 7 4 2 4 5 4 5 5 40.21 5 74.90 -170815251017 710 7 3 0 3 313 46 3 4 3 2 0 2 2 5 30.00 14 76.10 -1708162510181310101313101320102 5 4 4 5 5 4 5 7 50.21 21 79.20 -1708172510192720404743303333273 12 7 27 39 32 15 18 18 211.15 27 78.50 -1708182510203727173037274727249 22 12 6 15 22 12 39 12 181.05 28 82.00 -1708192510214333434040402743309 32 18 32 27 27 27 12 32 261.26 34 88.90 -1708202510224047302323302730250 27 39 15 9 9 15 12 15 181.05 41 88.00 -1708212510232020272713102027164 7 7 12 12 5 4 7 12 80.42 43 89.10 -1708222510244743331723231737240 39 32 18 6 9 9 6 22 181.05 41 92.30 -1708232510253037302340434723273 15 22 15 9 27 32 39 9 211.15 45 87.00 -170824251026233327202313 3 7149 9 18 12 7 9 5 2 3 80.42 36 80.50 -170825251027 310101313 7 320 79 2 4 4 5 5 3 2 7 40.10 34 82.50 -1708262511 1 3 310 3 71313 7 59 2 2 4 2 3 5 5 3 30.10 34 79.20 -1708272511 22310 71713273027154 9 4 3 6 5 12 15 12 80.42 23 79.80 -1708282511 3 7 7 7 7 3 3 010 44 3 3 3 3 2 2 0 4 20.00 14 83.20 -1708292511 41013131010204023139 4 5 5 4 4 7 27 9 80.42 25 85.90 -1708302511 5202010 3 0 0 3 3 59 7 7 4 2 0 0 2 2 30.10 32 88.60 -1708312511 61730505050272723274 6 15 48 48 48 12 12 9 240.00 47 85.90 -1709012511 73327203737201733224 18 12 7 22 22 7 6 18 140.84 48 95.10 -1709022511 83747433017332730264 22 39 32 15 6 18 12 15 201.05 43101.70 -1709032511 92727102027231320167 12 12 4 7 12 9 5 7 80.52 81122.20 -1709042511103730172013233343216 22 15 6 7 5 9 18 32 140.84 84185.50 -1709052511113727231313232313172 22 12 9 5 5 9 9 5 100.52 92122.50 -170906251112171313232313 333138 6 5 5 9 9 5 2 18 70.42 79134.90 -1709072511133037333327173073280 15 22 18 18 12 6 15154 321.36 75130.40 -1709082511147747435080735747474179 39 32 48207154 67 39 961.98 68118.50 -1709092511152317 7 3 7 3 0 3 63 9 6 3 2 3 2 0 2 30.10 48108.70 -170910251116 0 0 0 0 3231730 73 0 0 0 0 2 9 6 15 40.10 32101.60 -1709112511173323201723232323185 18 9 7 6 9 9 9 9 100.52 21 80.90 -1709122511182017202327204053220 7 6 7 9 12 7 27 56 160.94 8 76.40 -17091325111953303320131313 3178 56 15 18 7 5 5 5 2 140.84 10 76.00 -1709142511202020102333574040243 7 7 4 9 18 67 27 27 211.15 9 75.10 -1709152511215037433037305347327 48 22 32 15 22 15 56 39 311.36 9 73.60 -1709162511225053273740373030304 48 56 12 22 27 22 15 15 271.26 9 72.90 -1709172511233030202340372317220 15 15 7 9 27 22 9 6 140.84 10 72.90 -1709182511244037403727302333267 27 22 27 22 12 15 9 18 191.05 9 72.90 -1709192511252013 71313202720133 7 5 3 5 5 7 12 7 60.31 9 71.30 -1709202511263030172020 713 7144 15 15 6 7 7 3 5 3 80.42 15 74.50 -170921251127 710231713 31017100 3 4 9 6 5 2 4 6 50.21 15 73.60 -1709222512 1 71010 7 7 72320 91 3 4 4 3 3 3 9 7 40.21 12 78.10 -1709232512 2101010 310 72013 83 4 4 4 2 4 3 7 5 40.10 9 81.70 -1709242512 31013 7 710132023103 4 5 3 3 4 5 7 9 50.21 15 87.40 -1709252512 42323 7 7 0 3 0 3 66 9 9 3 3 0 2 0 2 40.10 27 90.40 -1709262512 5 7 7 710 3 0 320 57 3 3 3 4 2 0 2 7 30.10 28 91.10 -1709272512 63327433737305363323 18 12 32 22 22 15 56 94 341.36 29 91.30 -1709282512 75060634037403743370 48 80 94 27 22 27 22 32 441.57 32 91.20 -1709292512 83020232733172023193 15 7 9 12 18 6 7 9 100.63 32 90.00 -1709302512 92030301730232327200 7 15 15 6 15 9 9 12 110.00 32 90.83 -1710012512103317272020301727191 18 6 12 7 7 15 6 12 100.63 25 85.90 -1710022512111030171713 3 3 3 96 4 15 6 6 5 2 2 2 50.21 23 86.10 -171003251212232727 7 0 3 310100 9 12 12 3 0 2 2 4 60.21 19 86.50 -1710042512131723 3 0 7 31320 86 6 9 2 0 3 2 5 7 40.10 19 86.80 -1710052512142710 3 0 3 71033 93 12 4 2 0 2 3 4 18 60.31 19 70.00 -1710062512152723131017171320140 12 9 5 4 6 6 5 7 70.31 17 84.00 -17100725121610 3 0 3 3 71310 49 4 2 0 2 2 3 5 4 30.00 9 79.50 -1710082512171320 3 0 3 3 3 7 52 5 7 2 0 2 2 2 3 30.10 0 76.50 -17100925121817 3 0 3 0 0 0 3 26 6 2 0 2 0 0 0 2 20.00 0 72.10 -171010251219 3 0 0 3 0 3 720 36 2 0 0 2 0 2 3 7 20.00 0 70.70 -1710112512203340473740473733314 18 27 39 22 27 39 22 18 261.26 0 69.30 -1710122512215030404340372340303 48 15 27 32 27 22 9 27 261.26 0 69.90 -1710132512222740173353435350316 12 27 6 18 56 32 56 48 321.36 0 69.40 -1710142512234740474737373027312 39 27 39 39 22 22 15 12 271.26 0 68.60 -1710152512244047274040332710264 27 39 12 27 27 18 12 4 211.15 0 69.90 -1710162512251727171313102317137 6 12 6 5 5 4 9 6 70.31 0 70.40 -1710172512261310101017 710 7 84 5 4 4 4 6 3 4 3 40.10 0 69.80 -1710182512271013 7 7 7 01023 77 4 5 3 3 3 0 4 9 40.10 0 72.70 -1710192513 12723231720302323186 12 9 9 6 7 15 9 9 100.52 0 72.80 -1710202513 23320171017 31017127 18 7 6 4 6 2 4 6 70.31 0 75.10 -1710212513 31317171320232030153 5 6 6 5 7 9 7 15 80.42 8 75.70 -1710222513 4301310 7 7 71017101 15 5 4 3 3 3 4 6 50.21 8 76.50 -1710232513 520 7 71710 7 310 81 7 3 3 6 4 3 2 4 40.10 16 77.20 -1710242513 617 7202743472343227 6 3 7 12 32 39 9 32 181.05 16 76.70 -1710252513 73733432720272337247 22 18 32 12 7 12 9 22 170.94 16 77.90 -1710262513 83020333037402713230 15 7 18 15 22 27 12 5 150.94 16 76.40 -1710272513 9201310 7 3 01313 79 7 5 4 3 2 0 5 5 40.10 17 75.00 -17102825131010201313 710 710 90 4 7 5 5 3 4 3 4 40.21 17 74.40 -1710292513111017 0 3 3 0 7 3 43 4 6 0 2 2 0 3 2 20.00 16 74.30 -171030251312 7 7 0 3 0 3 0 3 23 3 3 0 2 0 2 0 2 20.00 16 74.50 -17103125131310 0 0 317 7 7 7 51 4 4 4 2 6 3 3 3 30.00 8 74.40 -17110125131410 0 3 3 7 0 710 40 4 0 2 2 3 0 3 4 20.00 0 71.50 -1711022513152317101013131727130 9 6 4 4 5 5 6 12 60.31 0 72.40 -1711032513163323232323 31013151 18 9 9 9 9 2 4 5 80.42 0 72.00 -17110425131710 7 7 3 7 3 310 50 4 3 3 2 3 2 2 4 30.10 0 70.90 -171105251318 7 0 3 0 0 0 7 7 24 3 0 2 0 0 0 3 3 10.00 0 69.90 -171106251319 7 0 0 0 0 0 0 3 10 3 0 0 0 0 0 0 2 10.00 0 68.10 -1711072513201327304340375757304 5 12 15 32 27 22 67 67 311.36 0 67.00 -1711082513215357334350403347356 56 67 18 32 48 27 18 39 381.46 0 66.40 -1711092513223333233327373037253 18 18 9 18 12 22 15 22 170.94 0 64.60 -1711102513232733373737373030268 12 18 22 22 22 22 15 15 181.05 0 67.20 -1711112513243023172017101013140 15 9 6 7 6 4 4 5 70.42 0 65.90 -1711122513251713 710 7101323100 6 5 3 4 3 4 5 9 50.21 0 68.00 -171113251326102010171023 7 7104 4 7 4 6 4 9 3 3 50.21 0 70.60 -1711142513272730271013201727171 12 15 12 4 5 7 6 12 90.52 9 72.80 -1711152514 11723273323332317196 6 9 12 18 9 18 9 6 110.63 9 72.60 -1711162514 240403020 7131727194 27 27 15 7 3 5 6 12 130.73 12 71.60 -1711172514 31017132313 0 310 89 4 6 5 9 5 0 2 4 40.21 16 74.70 -1711182514 41713201717131017124 6 5 7 6 6 5 4 6 60.31 10 74.30 -1711192514 5 7132317 3 3 7 7 80 3 5 9 6 2 2 3 3 40.10 0 72.70 -1711202514 610 3 0 0 7202030 90 4 2 0 0 3 7 7 15 50.21 0 71.80 -1711212514 74043433323373737293 27 32 32 18 9 22 22 22 231.15 0 71.40 -1711222514 82327172030202317177 9 12 6 7 15 7 9 6 90.52 0 71.60 -1711232514 91710202723171720151 6 4 7 12 9 6 6 7 70.42 0 70.60 -171124251410272013 3 3 73330136 12 7 5 2 2 3 18 15 80.42 0 72.20 -171125251411332310 7 0 7 7 3 90 18 9 4 3 0 3 3 2 50.21 11 72.40 -171126251412 0 010 0 3 310 7 33 0 0 4 0 2 2 4 3 20.00 13 73.50 -1711272514131310 7 3171013 7 80 5 4 3 2 6 4 5 3 40.10 12 71.70 -1711282514142720101010 710 7101 12 7 4 4 4 3 4 3 50.21 11 70.00 -171129251415101013 7 0 71317 77 4 4 5 3 0 3 5 6 40.10 9 70.60 -1711302514162337101020171717151 9 22 4 4 7 6 6 6 80.00 7 70.77 -171201251417102713 7132320 7120 4 12 5 3 5 9 7 3 60.31 0 68.30 -171202251418 7 0 3 0 320 7 7 47 3 0 2 0 2 7 3 3 20.00 0 69.50 -171203251419 3 0 0 3 0 0 0 7 13 2 0 0 2 0 0 0 3 10.00 0 67.00 -171204251420 3 0171320273037147 2 0 6 5 7 12 15 22 90.52 0 66.40 -1712052514213030374350403333296 15 15 22 32 48 27 18 18 241.26 0 66.00 -1712062514223037302027273020221 15 22 15 7 12 12 15 7 130.84 9 66.30 -1712072514232323201330272023179 9 9 7 5 15 12 7 9 90.52 7 65.90 -1712082514241313201317 71010103 5 5 7 5 6 3 4 4 50.21 0 67.80 -17120925142510 3 0 71313 7 3 56 4 2 0 3 5 5 3 2 30.10 0 69.00 -171210251426 0 010 3 3 7 313 39 0 0 4 2 2 3 2 5 20.00 0 69.80 -1712112514271023232330232313168 4 9 9 9 15 9 9 5 90.52 5 70.10 -1712122515 12327232310273727197 9 12 9 9 4 12 22 12 110.63 9 69.20 -1712132515 2 3 0131017202327113 2 0 5 4 6 7 9 12 60.31 0 69.90 -1712142515 32310 3 3 3 0 7 7 56 9 4 2 2 2 0 3 3 30.10 0 69.80 -1712152515 4 0 0 0 713 7 713 47 0 0 0 3 5 3 3 5 20.00 0 69.50 -1712162515 5 3 0 7 7 7 3 320 50 2 0 3 3 3 2 2 7 30.00 0 69.00 -1712172515 62730473330334337280 12 15 39 18 15 18 32 22 211.15 0 68.80 -1712182515 74037403030231310223 27 22 27 15 15 9 5 4 160.94 0 69.40 -1712192515 8 7 7 3 310202023 93 3 3 2 2 4 7 7 9 50.21 5 66.60 -1712202515 917171020 71013 0 94 6 6 4 7 3 4 5 0 40.21 9 71.80 -171221251510 3 7 710 7 3 0 0 37 2 3 3 4 3 2 0 0 20.00 14 73.60 -171222251511 3 3 3 0 0 0 010 19 2 2 2 0 0 0 0 4 10.00 16 72.90 -17122325151213231313 3 0 7 7 79 5 9 5 5 2 0 3 3 40.10 18 73.70 -1712242515131320202730301730187 5 7 7 12 15 15 6 15 100.63 18 73.60 -17122525151427 7202313172717151 12 3 7 9 5 6 12 6 80.42 16 73.20 -1712262515152727101713133330170 12 12 4 6 5 5 18 15 100.52 11 69.50 -17122725151620231310 7271720137 7 9 5 4 3 12 6 7 70.31 9 68.60 -171228251517 7 3131010131017 83 3 2 5 4 4 5 4 6 40.10 0 68.80 -171229251518 7 7 3 3 71020 7 64 3 3 2 2 3 4 7 3 30.10 0 69.10 -171230251519 710 3 0 3 7 317 50 3 4 2 0 2 3 2 6 30.00 0 68.10 -171231251520 3 0 3 3 0 7 310 29 2 2 2 2 2 3 2 4 20.00 5 68.67 +1701012502 73333272323271717200 18 18 12 9 9 12 6 6 110.63 8 70.10 +1701022502 8132320131320 3 7112 5 9 7 5 5 7 2 3 50.21 0 70.60 +1701032502 9 313233320302727176 2 5 9 18 7 15 12 12 100.63 0 71.00 +1701042502101313172020233330169 5 5 6 7 7 9 18 15 90.52 0 70.00 +1701052502113033202030333740243 15 18 7 7 15 18 22 27 160.94 0 70.90 +1701062502123333272323232330215 18 18 12 9 9 9 9 15 120.73 0 69.60 +1701072502133727302743373327261 22 12 15 12 32 22 18 12 181.05 0 69.70 +1701082502142320233727233340226 9 7 9 22 12 9 18 27 140.84 0 69.20 +1701092502153020132033301327186 15 7 5 7 18 15 5 12 100.63 0 70.00 +170110250216201717 3 7302323140 7 6 6 2 3 15 9 9 70.42 0 70.30 +170111250217232017 3 7202020130 9 7 6 2 3 7 7 7 60.31 0 72.00 +1701122502182023 0 3 0 31017 76 7 9 0 2 0 2 4 6 40.10 7 73.00 +1701132502191310 0 3 7131310 69 5 4 0 2 3 5 5 4 40.10 18 72.40 +170114250220101310 3 3 7 713 66 4 5 4 2 2 3 3 5 40.10 21 74.10 +17011525022123 71710 7 717 7 95 9 3 6 4 3 3 6 3 50.21 19 75.00 +170116250222 7 3 3 0 0 0 7 7 27 3 2 2 0 0 0 3 3 20.00 16 75.80 +17011725022310 3 3 3 317 7 3 49 4 2 2 2 2 6 3 2 30.10 22 76.10 +170118250224 723272330333733213 3 9 12 9 15 18 22 18 130.84 25 76.10 +1701192502253323272717171317174 18 9 12 12 6 6 5 6 90.52 22 77.00 +1701202502263027201320102027167 15 12 7 5 7 4 7 12 90.52 38 80.60 +1701212502273317171710173033174 18 6 6 6 4 6 15 18 100.63 52 83.40 +1701222503 13027231320131317156 15 12 9 5 7 5 5 6 80.42 49 84.00 +1701232503 2 3 310 3 7131717 73 2 2 4 2 3 5 6 6 40.10 41 81.50 +1701242503 317 7 3 3 3 0 7 7 47 6 3 2 2 2 0 3 3 30.00 29 79.70 +1701252503 420271013 3 0 010 83 7 12 4 5 2 0 0 4 40.10 32 82.50 +1701262503 5 0 0202330373327170 0 0 7 9 15 22 18 12 100.63 27 80.60 +1701272503 64340373333331320252 32 27 22 18 18 18 5 7 181.05 18 77.90 +1701282503 7232717 7 3102027134 9 12 6 3 2 4 7 12 70.31 20 76.10 +1701292503 820231310172013 7123 7 9 5 4 6 7 5 3 60.31 23 74.40 +1701302503 9 710101020201027114 3 4 4 4 7 7 4 12 60.31 23 74.70 +1701312503102727303330403743267 12 12 15 18 15 27 22 32 191.05 23 75.07 +1702012503114030303040473050297 27 15 15 15 27 39 15 48 251.26 27 73.90 +1702022503123337333027333740270 18 22 18 15 12 18 22 27 191.05 29 73.10 +1702032503133037402027333030247 15 22 27 7 12 18 15 15 160.94 23 73.00 +1702042503142730231720172023177 12 15 9 6 7 6 7 9 90.52 7 71.90 +1702052503152733272023303320213 12 18 12 7 9 15 18 7 120.73 7 70.60 +1702062503163027171723272333197 15 12 6 6 9 12 9 18 110.63 7 70.50 +1702072503172320 71723171717141 9 7 3 6 9 6 6 6 60.31 8 70.10 +17020825031810 0 7101717 717 85 4 0 3 4 6 6 3 6 40.10 0 71.10 +17020925031920131017 7202023130 7 5 4 6 3 7 7 9 60.31 14 71.50 +1702102503201710171320231323136 6 4 6 5 7 9 5 9 60.31 15 72.10 +1702112503213010 7 7 3 0 7 3 67 15 4 3 3 2 0 3 2 40.10 14 73.80 +170212250322 7 0 3 3 31017 7 50 3 0 2 2 2 4 6 3 30.00 12 74.30 +1702132503232010 3 7 3201010 83 7 4 2 3 2 7 4 4 40.10 12 73.00 +170214250324 3 0 0 0 0 0 310 16 2 0 0 0 0 0 2 4 10.00 11 72.70 +170215250325 0 0 7 0 3 313 7 33 0 0 3 0 2 2 5 3 20.00 16 73.00 +170216250326 71320 723302317140 3 5 7 3 9 15 9 6 70.42 8 72.20 +1702172503272033373723332740250 7 18 22 22 9 18 12 27 170.94 9 72.80 +1702182504 14040201710203033210 27 27 7 6 4 7 15 18 140.84 8 74.90 +1702192504 2303023 7132327 7160 15 15 9 3 5 9 12 3 90.52 16 76.40 +1702202504 3 727171717233017155 3 12 6 6 6 9 15 6 80.42 23 78.90 +1702212504 42017 7 3 3 3 017 70 7 6 3 2 2 2 0 6 40.10 18 80.70 +1702222504 533272323 7131310149 18 12 9 9 3 5 5 4 80.42 18 81.40 +1702232504 61723202020302330183 6 9 7 7 7 15 9 15 90.52 14 81.60 +1702242504 74333273737271727248 32 18 12 22 22 12 6 12 170.94 15 80.50 +1702252504 827231713 3 3 320109 12 9 6 5 2 2 2 7 60.31 21 78.50 +1702262504 9 7 7 0 3 3 0 0 3 23 3 3 0 2 2 0 0 2 20.00 22 77.50 +1702272504101013101310102727120 4 5 4 5 4 4 12 12 60.31 31 80.60 +17022825041130201313 7132023139 15 7 5 5 3 5 7 9 70.00 36 78.87 +1703012504123033274347434757327 15 18 12 32 39 32 39 67 321.36 39 79.30 +1703022504134743374747334323320 39 32 22 39 39 18 32 9 291.36 37 77.80 +1703032504143337403730402013250 18 22 27 22 15 27 7 5 181.05 27 76.70 +1703042504154040303027332743270 27 27 15 15 12 18 12 32 201.05 0 73.90 +1703052504162723272327274037231 12 9 12 9 12 12 27 22 140.84 8 71.60 +1703062504174030103337374740274 27 15 4 18 22 22 39 27 221.15 0 71.30 +1703072504182330332723302727220 9 15 18 12 9 15 12 12 130.73 0 70.60 +1703082504193313 72027203333186 18 5 3 7 12 7 18 18 110.63 0 69.60 +1703092504203323203327202320199 18 9 7 18 12 7 9 7 110.63 0 70.30 +170310250421203033302010 720170 7 15 18 15 7 4 3 7 100.52 0 70.00 +17031125042210 310 3 0 31333 75 4 2 4 2 0 2 5 18 50.21 0 69.10 +170312250423303313 720 7 7 7124 15 18 5 3 7 3 3 3 70.42 0 69.20 +170313250424 31310 3 3 0 0 3 35 2 5 4 2 2 0 0 2 20.00 0 69.50 +170314250425 717 7 713131010 84 3 6 3 3 5 5 4 4 40.10 0 68.80 +17031525042610131717 7 31333113 4 5 6 6 3 2 5 18 60.31 0 69.10 +1703162504273017 0 310 31013 86 15 6 0 2 4 2 4 5 50.21 0 69.70 +1703172505 1 31310 3 0 0 313 45 2 5 4 2 0 0 2 5 20.00 0 69.90 +1703182505 2 7 0 0 0 0 0 710 24 3 0 0 0 0 0 3 4 10.00 0 69.60 +1703192505 3 0 0 7 3 0 3 310 26 0 0 3 2 0 2 2 4 20.00 0 70.50 +1703202505 4 3 0 3 3 0 3 3 3 18 2 0 2 2 0 2 2 2 20.00 0 72.10 +1703212505 51033402330475040273 4 18 27 9 15 39 48 27 231.15 8 70.50 +1703222505 63733233337404343289 22 18 9 18 22 27 32 32 221.15 9 72.00 +1703232505 740332017 717 710151 27 18 7 6 3 6 3 4 90.52 9 71.50 +1703242505 8202313 31717 7 3103 7 9 5 2 6 6 3 2 50.21 9 71.90 +1703252505 9 013 3 7 7 7 313 53 0 5 2 3 3 3 2 5 30.10 11 73.70 +17032625051017 3 3 7 7 3 013 53 6 2 2 3 3 2 0 5 30.10 18 76.80 +1703272505112347475343506043366 9 39 39 56 32 48 80 32 421.57 33 82.50 +1703282505125350333730273033293 56 48 18 22 15 12 15 18 261.26 38 83.40 +1703292505133733373330401733260 22 18 22 18 15 27 6 18 181.05 33 83.10 +1703302505143343301730304043266 18 32 15 6 15 15 27 32 201.05 32 85.70 +1703312505154347433733374040320 32 39 32 22 18 22 27 27 270.00 40 84.07 +1704012505162723273023402723220 12 9 12 15 9 27 12 9 130.84 48100.90 +17040225051723201710202310 3126 9 7 6 4 7 9 4 2 60.31 57111.90 +170403250518 3 7 7131713 3 7 70 2 3 3 5 6 5 2 3 40.10 68107.90 +170404250519233747472313 727224 9 22 39 39 9 5 3 12 170.94 54 93.90 +1704052505201710201313171733140 6 4 7 5 5 6 6 18 70.42 36 84.70 +17040625052113 3 71323301313115 5 2 3 5 9 15 5 5 60.31 25 75.80 +17040725052230202017 7 72333157 15 7 7 6 3 3 9 18 80.52 16 74.10 +1704082505233330372320202343229 18 15 22 9 7 7 9 32 150.84 0 73.30 +170409250524404330232323 713202 27 32 15 9 9 9 3 5 140.84 0 74.70 +17041025052523 3 3 317 7 713 76 9 2 2 2 6 3 3 5 40.10 9 73.90 +1704112505261010233323203023172 4 4 9 18 9 7 15 9 90.52 9 74.90 +170412250527302010 7 0 0 0 3 70 15 7 4 3 0 0 0 2 40.10 13 71.80 +1704132506 1 7 7 3 0 7132013 70 3 3 2 0 3 5 7 5 40.10 16 73.90 +1704142506 23333232027202720203 18 18 9 7 12 7 12 7 110.63 12 73.30 +1704152506 3302020 3 7 710 7104 15 7 7 2 3 3 4 3 60.21 0 73.50 +1704162506 4 3 71010 0 3 710 50 2 3 4 4 0 2 3 4 30.00 0 75.00 +1704172506 5 3 313 310 3 710 52 2 2 5 2 4 2 3 4 30.10 0 75.80 +1704182506 617 7 3 710101727 98 6 3 2 3 4 4 6 12 50.21 16 86.40 +1704192506 730433013 7203027200 15 32 15 5 3 7 15 12 130.73 11 81.60 +1704202506 84357374033273027294 32 67 22 27 18 12 15 12 261.26 20 81.40 +1704212506 9 71010 720435347197 3 4 4 3 7 32 56 39 181.05 27 83.10 +1704222506105053505050474053393 48 56 48 48 48 39 27 56 461.57 21 84.50 +1704232506114040534350474343359 27 27 56 32 48 39 32 32 371.46 29 83.40 +1704242506123337333720333730260 18 22 18 22 7 18 22 15 181.05 32 81.10 +1704252506132723202330202020183 12 9 7 9 15 7 7 7 90.52 29 82.30 +1704262506142713231317232020156 12 5 9 5 6 9 7 7 80.42 27 80.60 +17042725061520232310 7 71717124 7 9 9 4 3 3 6 6 60.31 18 79.30 +170428250616131013 713101323102 5 4 5 3 5 4 5 9 50.21 25 79.10 +1704292506172010171310102020120 7 4 6 5 4 4 7 7 60.21 23 78.20 +17043025061813 7 713 7101717 91 5 3 3 5 3 4 6 6 40.00 16 78.87 +1705012506192317 0 3 0 31317 76 9 6 0 2 0 2 5 6 40.10 9 76.40 +170502250620 320 713 3 3 317 69 2 7 3 5 2 2 2 6 40.10 19 78.40 +17050325062110 3 3 71010 3 3 49 4 2 2 3 4 4 2 2 30.10 12 76.20 +170504250622 31313 3 7 31337 92 2 5 5 2 3 2 5 22 60.31 11 75.40 +1705052506233013 0 310 3 3 3 65 15 5 0 2 4 2 2 2 40.10 22 74.80 +17050625062410171010 7 31310 80 4 6 4 4 3 2 5 4 40.10 18 74.10 +17050725062513202313 7132720136 5 7 9 5 3 5 12 7 70.31 16 73.00 +17050825062620 71710 7101313 97 7 3 6 4 3 4 5 5 50.21 9 71.80 +170509250627131010 717171013 97 5 4 4 3 6 6 4 5 50.21 0 70.20 +1705102507 12013 0 023101323102 7 5 0 0 9 4 5 9 50.21 0 69.90 +1705112507 2132717 710101017111 5 12 6 3 4 4 4 6 60.21 0 70.50 +1705122507 31710232023101313129 6 4 9 7 9 4 5 5 60.31 5 70.40 +1705132507 4 313 3 7 7 71313 66 2 5 2 3 3 3 5 5 40.10 0 71.90 +1705142507 52013132723201723156 7 5 5 12 9 7 6 9 80.42 0 72.70 +1705152507 6 317233320233027176 2 6 9 18 7 9 15 12 100.52 0 72.20 +1705162507 7232317172713 717144 9 9 6 6 12 5 3 6 70.42 16 73.50 +1705172507 82017232017101323143 7 6 9 7 6 4 5 9 70.31 8 73.10 +1705182507 930333013 3101317149 15 18 15 5 2 4 5 6 90.52 15 73.90 +1705192507101723201020303330183 6 9 7 4 7 15 18 15 100.63 16 74.00 +1705202507113737403737403330291 22 22 27 22 22 27 18 15 221.15 21 74.20 +1705212507122727232017102020164 12 12 9 7 6 4 7 7 80.42 22 75.30 +1705222507132020132020232730173 7 7 5 7 7 9 12 15 90.52 34 76.30 +1705232507141330131017132023139 5 15 5 4 6 5 7 9 70.42 39 77.90 +1705242507151310 7 7 7 3 3 3 53 5 4 3 3 3 2 2 2 30.10 16 79.90 +170525250716 3 3 0 3 7 7 317 43 2 2 0 2 3 3 2 6 20.00 21 78.10 +17052625071710 3 3 7 0 3 7 3 36 4 2 2 3 0 2 3 2 20.00 18 82.40 +17052725071810 3 0 010272757134 4 2 0 0 4 12 12 67 130.73 16 84.10 +17052825071957675747332013 7301 67111 67 39 18 7 5 3 401.46 14 81.00 +170529250720 3 7 720403327 7144 2 3 3 7 27 18 12 3 90.52 9 77.90 +170530250721203010 7 3 3 3 7 83 7 15 4 3 2 2 2 3 50.21 0 75.70 +170531250722 013 3 310 7 7 7 50 0 5 2 2 4 3 3 3 00.00 0 78.20 +170601250723 3 7 7 313272327110 2 3 3 2 5 12 9 12 60.31 10 77.90 +1706022507241713 7 7 7 71010 78 6 5 3 3 3 3 4 4 40.10 18 80.40 +170603250725 3 3172033371310136 2 2 6 7 18 22 5 4 80.42 18 80.20 +170604250726 7 3 3 3 3 0 3 3 25 3 2 2 2 2 0 2 2 20.00 18 79.90 +170605250727 710 71023101017 94 3 4 3 4 9 4 4 6 50.21 22 81.80 +1706062508 1171710 710 7 7 7 82 6 6 4 3 4 3 3 3 40.10 18 77.60 +1706072508 2101313 3 710 317 76 4 5 5 2 3 4 2 6 40.10 11 77.80 +1706082508 313 7 3 313 7 710 63 5 3 2 2 5 3 3 4 30.10 10 76.20 +1706092508 423 7 3 3 3 3 3 7 52 9 3 2 2 2 2 2 3 30.10 0 76.00 +1706102508 51310 3 3 3 3 3 7 45 5 4 2 2 2 2 2 3 30.00 0 77.00 +1706112508 6 313201330473720183 2 5 7 5 15 39 22 7 130.73 0 76.60 +1706122508 71013 7 720172323120 4 5 3 3 7 6 9 9 60.31 0 77.50 +1706132508 8271710201020 7 7118 12 6 4 7 4 7 3 3 60.31 8 77.20 +1706142508 9 010132017171010 97 0 4 5 7 6 6 4 4 40.21 8 76.40 +1706152508101310 310 7 3 7 0 53 5 4 2 4 3 2 3 0 30.10 22 79.90 +170616250811 717373743373050258 3 6 22 22 32 22 15 48 211.15 22 75.80 +1706172508123730102023203330203 22 15 4 7 9 7 18 15 120.73 23 77.20 +1706182508133323202023132020172 18 9 7 7 9 5 7 7 90.52 21 77.30 +1706192508141320131713 3 0 3 82 5 7 5 6 5 2 0 2 40.10 19 76.00 +170620250815 310 7 3 710 3 0 43 2 4 3 2 3 4 2 0 20.00 21 76.90 +170621250816 0 3 3 7 7101320 63 0 2 2 3 3 4 5 7 30.10 25 76.20 +1706222508172010 3 3 3 32013 75 7 4 2 2 2 2 7 5 40.10 16 76.10 +17062325081810 3 710 3 72020 80 4 2 3 4 2 3 7 7 40.10 15 76.10 +1706242508191313172720172327157 5 5 6 12 7 6 9 12 80.42 17 76.60 +1706252508202017332317201320163 7 6 18 9 6 7 5 7 80.42 13 76.20 +1706262508212317102013132017133 9 6 4 7 5 5 7 6 60.31 16 76.20 +1706272508221713 7131010 710 87 6 5 3 5 4 4 3 4 40.10 14 76.60 +17062825082313171010 7 0 0 3 60 5 6 4 4 3 0 0 2 30.10 12 74.50 +170629250824 7172013 7 3 3 7 77 3 6 7 5 3 2 2 3 40.10 9 74.20 +170630250825 3 3 7 710 7 710 54 2 2 3 3 4 3 3 4 30.00 8 75.10 +1707012508261330201723273017177 5 15 7 6 9 12 15 6 90.52 9 73.10 +1707022508272727404327173033244 12 12 27 32 12 6 15 18 170.94 8 73.60 +1707032509 120201013 3 7 717 97 7 7 4 5 2 3 3 6 50.21 0 74.10 +1707042509 2 710 7 3 3 31013 56 3 4 3 2 2 2 4 5 30.10 0 74.20 +1707052509 3 7 3 0 3 3 3 3 7 29 3 2 0 2 2 2 2 3 20.00 0 75.50 +1707062509 4 7 7101013171330107 3 3 4 4 5 6 5 15 60.31 10 78.50 +1707072509 51713 3 3 7 71013 73 6 5 2 2 3 3 4 5 40.10 18 82.20 +1707082509 613 7 3 7 3 3 3 7 46 5 3 2 3 2 2 2 3 30.00 22 89.50 +1707092509 74730235020304033273 39 15 9 48 7 15 27 18 221.15 32 94.00 +1707102509 830301710 7101320137 15 15 6 4 3 4 5 7 70.42 31 98.20 +1707112509 91723271313231017143 6 9 12 5 5 9 4 6 70.42 27 94.10 +17071225091013 7 7 71010 7 7 68 5 3 3 3 4 4 3 3 40.10 43 93.20 +170713250911 7 7 3 310 3 713 53 3 3 2 2 4 2 3 5 30.10 41 95.30 +170714250912 3 7 3 3 7 7 3 7 40 2 3 2 2 3 3 2 3 20.00 37 97.00 +170715250913 710 3 3 3 7 710 50 3 4 2 2 2 3 3 4 30.10 22 94.60 +1707162509141717435357536047347 6 6 32 56 67 56 80 39 431.57 14 89.30 +1707172509153037374040531317267 15 22 22 27 27 56 5 6 221.15 14 88.40 +1707182509162327131013 7 313109 9 12 5 4 5 3 2 5 60.31 0 80.80 +170719250917 3 7 3 7 31010 7 50 2 3 2 3 2 4 4 3 30.10 0 75.50 +1707202509181010 7 713172727118 4 4 3 3 5 6 12 12 60.31 0 72.50 +1707212509194033231323301730209 27 18 9 5 9 15 6 15 130.73 0 71.60 +1707222509202720374017232023207 12 7 22 27 6 9 7 9 120.73 0 71.80 +1707232509213020232723232037203 15 7 9 12 9 9 7 22 110.63 0 72.80 +1707242509222023271723201333176 7 9 12 6 9 7 5 18 90.52 0 72.30 +1707252509232013202327202330176 7 5 7 9 12 7 9 15 90.52 0 72.00 +17072625092430203717201313 3153 15 7 22 6 7 5 5 2 90.52 0 70.70 +170727250925 710 7 71323 727101 3 4 3 3 5 9 3 12 50.21 0 70.50 +1707282509261310 71317202713120 5 4 3 5 6 7 12 5 60.31 0 71.60 +170729250927 7101310 710 3 7 67 3 4 5 4 3 4 2 3 40.10 0 72.10 +1707302510 11310 7 7 3 713 0 60 5 4 3 3 2 3 5 0 30.10 9 71.70 +1707312510 2 31010 7 71010 7 64 2 4 4 3 3 4 4 3 30.00 0 71.80 +1708012510 3 7 7131320 7 3 7 77 3 3 5 5 7 3 2 3 40.10 8 75.70 +1708022510 410 7 3 71713 710 74 4 3 2 3 6 5 3 4 40.10 9 76.60 +1708032510 5 3 7 31017334037150 2 3 2 4 6 18 27 22 100.63 9 77.30 +1708042510 62330374340403327273 9 15 22 32 27 27 18 12 201.05 9 76.30 +1708052510 72337272027333727231 9 22 12 7 12 18 22 12 140.84 9 76.30 +1708062510 82723204023132327196 12 9 7 27 9 5 9 12 110.63 8 75.60 +1708072510 9 713172013 7 3 7 87 3 5 6 7 5 3 2 3 40.10 8 74.80 +170808251010 7 7 7 7101317 7 75 3 3 3 3 4 5 6 3 40.10 8 73.00 +170809251011 3 3101010 71013 66 2 2 4 4 4 3 4 5 40.10 8 73.40 +170810251012 3 7101320 7 313 76 2 3 4 5 7 3 2 5 40.10 9 73.00 +1708112510131313101313132717119 5 5 4 5 5 5 12 6 60.31 8 71.70 +1708122510142730171313 73027164 12 15 6 5 5 3 15 12 90.52 7 72.20 +1708132510152317171713131317130 9 6 6 6 5 5 5 6 60.31 7 70.00 +1708142510162010 31013101313 92 7 4 2 4 5 4 5 5 40.21 5 74.90 +170815251017 710 7 3 0 3 313 46 3 4 3 2 0 2 2 5 30.00 14 76.10 +1708162510181310101313101320102 5 4 4 5 5 4 5 7 50.21 21 79.20 +1708172510192720404743303333273 12 7 27 39 32 15 18 18 211.15 27 78.50 +1708182510203727173037274727249 22 12 6 15 22 12 39 12 181.05 28 82.00 +1708192510214333434040402743309 32 18 32 27 27 27 12 32 261.26 34 88.90 +1708202510224047302323302730250 27 39 15 9 9 15 12 15 181.05 41 88.00 +1708212510232020272713102027164 7 7 12 12 5 4 7 12 80.42 43 89.10 +1708222510244743331723231737240 39 32 18 6 9 9 6 22 181.05 41 92.30 +1708232510253037302340434723273 15 22 15 9 27 32 39 9 211.15 45 87.00 +170824251026233327202313 3 7149 9 18 12 7 9 5 2 3 80.42 36 80.50 +170825251027 310101313 7 320 79 2 4 4 5 5 3 2 7 40.10 34 82.50 +1708262511 1 3 310 3 71313 7 59 2 2 4 2 3 5 5 3 30.10 34 79.20 +1708272511 22310 71713273027154 9 4 3 6 5 12 15 12 80.42 23 79.80 +1708282511 3 7 7 7 7 3 3 010 44 3 3 3 3 2 2 0 4 20.00 14 83.20 +1708292511 41013131010204023139 4 5 5 4 4 7 27 9 80.42 25 85.90 +1708302511 5202010 3 0 0 3 3 59 7 7 4 2 0 0 2 2 30.10 32 88.60 +1708312511 61730505050272723274 6 15 48 48 48 12 12 9 240.00 47 85.90 +1709012511 73327203737201733224 18 12 7 22 22 7 6 18 140.84 48 95.10 +1709022511 83747433017332730264 22 39 32 15 6 18 12 15 201.05 43101.70 +1709032511 92727102027231320167 12 12 4 7 12 9 5 7 80.52 81122.20 +1709042511103730172013233343216 22 15 6 7 5 9 18 32 140.84 84185.50 +1709052511113727231313232313172 22 12 9 5 5 9 9 5 100.52 92122.50 +170906251112171313232313 333138 6 5 5 9 9 5 2 18 70.42 79134.90 +1709072511133037333327173073280 15 22 18 18 12 6 15154 321.36 75130.40 +1709082511147747435080735747474179 39 32 48207154 67 39 961.98 68118.50 +1709092511152317 7 3 7 3 0 3 63 9 6 3 2 3 2 0 2 30.10 48108.70 +170910251116 0 0 0 0 3231730 73 0 0 0 0 2 9 6 15 40.10 32101.60 +1709112511173323201723232323185 18 9 7 6 9 9 9 9 100.52 21 80.90 +1709122511182017202327204053220 7 6 7 9 12 7 27 56 160.94 8 76.40 +17091325111953303320131313 3178 56 15 18 7 5 5 5 2 140.84 10 76.00 +1709142511202020102333574040243 7 7 4 9 18 67 27 27 211.15 9 75.10 +1709152511215037433037305347327 48 22 32 15 22 15 56 39 311.36 9 73.60 +1709162511225053273740373030304 48 56 12 22 27 22 15 15 271.26 9 72.90 +1709172511233030202340372317220 15 15 7 9 27 22 9 6 140.84 10 72.90 +1709182511244037403727302333267 27 22 27 22 12 15 9 18 191.05 9 72.90 +1709192511252013 71313202720133 7 5 3 5 5 7 12 7 60.31 9 71.30 +1709202511263030172020 713 7144 15 15 6 7 7 3 5 3 80.42 15 74.50 +170921251127 710231713 31017100 3 4 9 6 5 2 4 6 50.21 15 73.60 +1709222512 1 71010 7 7 72320 91 3 4 4 3 3 3 9 7 40.21 12 78.10 +1709232512 2101010 310 72013 83 4 4 4 2 4 3 7 5 40.10 9 81.70 +1709242512 31013 7 710132023103 4 5 3 3 4 5 7 9 50.21 15 87.40 +1709252512 42323 7 7 0 3 0 3 66 9 9 3 3 0 2 0 2 40.10 27 90.40 +1709262512 5 7 7 710 3 0 320 57 3 3 3 4 2 0 2 7 30.10 28 91.10 +1709272512 63327433737305363323 18 12 32 22 22 15 56 94 341.36 29 91.30 +1709282512 75060634037403743370 48 80 94 27 22 27 22 32 441.57 32 91.20 +1709292512 83020232733172023193 15 7 9 12 18 6 7 9 100.63 32 90.00 +1709302512 92030301730232327200 7 15 15 6 15 9 9 12 110.00 32 90.83 +1710012512103317272020301727191 18 6 12 7 7 15 6 12 100.63 25 85.90 +1710022512111030171713 3 3 3 96 4 15 6 6 5 2 2 2 50.21 23 86.10 +171003251212232727 7 0 3 310100 9 12 12 3 0 2 2 4 60.21 19 86.50 +1710042512131723 3 0 7 31320 86 6 9 2 0 3 2 5 7 40.10 19 86.80 +1710052512142710 3 0 3 71033 93 12 4 2 0 2 3 4 18 60.31 19 70.00 +1710062512152723131017171320140 12 9 5 4 6 6 5 7 70.31 17 84.00 +17100725121610 3 0 3 3 71310 49 4 2 0 2 2 3 5 4 30.00 9 79.50 +1710082512171320 3 0 3 3 3 7 52 5 7 2 0 2 2 2 3 30.10 0 76.50 +17100925121817 3 0 3 0 0 0 3 26 6 2 0 2 0 0 0 2 20.00 0 72.10 +171010251219 3 0 0 3 0 3 720 36 2 0 0 2 0 2 3 7 20.00 0 70.70 +1710112512203340473740473733314 18 27 39 22 27 39 22 18 261.26 0 69.30 +1710122512215030404340372340303 48 15 27 32 27 22 9 27 261.26 0 69.90 +1710132512222740173353435350316 12 27 6 18 56 32 56 48 321.36 0 69.40 +1710142512234740474737373027312 39 27 39 39 22 22 15 12 271.26 0 68.60 +1710152512244047274040332710264 27 39 12 27 27 18 12 4 211.15 0 69.90 +1710162512251727171313102317137 6 12 6 5 5 4 9 6 70.31 0 70.40 +1710172512261310101017 710 7 84 5 4 4 4 6 3 4 3 40.10 0 69.80 +1710182512271013 7 7 7 01023 77 4 5 3 3 3 0 4 9 40.10 0 72.70 +1710192513 12723231720302323186 12 9 9 6 7 15 9 9 100.52 0 72.80 +1710202513 23320171017 31017127 18 7 6 4 6 2 4 6 70.31 0 75.10 +1710212513 31317171320232030153 5 6 6 5 7 9 7 15 80.42 8 75.70 +1710222513 4301310 7 7 71017101 15 5 4 3 3 3 4 6 50.21 8 76.50 +1710232513 520 7 71710 7 310 81 7 3 3 6 4 3 2 4 40.10 16 77.20 +1710242513 617 7202743472343227 6 3 7 12 32 39 9 32 181.05 16 76.70 +1710252513 73733432720272337247 22 18 32 12 7 12 9 22 170.94 16 77.90 +1710262513 83020333037402713230 15 7 18 15 22 27 12 5 150.94 16 76.40 +1710272513 9201310 7 3 01313 79 7 5 4 3 2 0 5 5 40.10 17 75.00 +17102825131010201313 710 710 90 4 7 5 5 3 4 3 4 40.21 17 74.40 +1710292513111017 0 3 3 0 7 3 43 4 6 0 2 2 0 3 2 20.00 16 74.30 +171030251312 7 7 0 3 0 3 0 3 23 3 3 0 2 0 2 0 2 20.00 16 74.50 +17103125131310 0 0 317 7 7 7 51 4 4 4 2 6 3 3 3 30.00 8 74.40 +17110125131410 0 3 3 7 0 710 40 4 0 2 2 3 0 3 4 20.00 0 71.50 +1711022513152317101013131727130 9 6 4 4 5 5 6 12 60.31 0 72.40 +1711032513163323232323 31013151 18 9 9 9 9 2 4 5 80.42 0 72.00 +17110425131710 7 7 3 7 3 310 50 4 3 3 2 3 2 2 4 30.10 0 70.90 +171105251318 7 0 3 0 0 0 7 7 24 3 0 2 0 0 0 3 3 10.00 0 69.90 +171106251319 7 0 0 0 0 0 0 3 10 3 0 0 0 0 0 0 2 10.00 0 68.10 +1711072513201327304340375757304 5 12 15 32 27 22 67 67 311.36 0 67.00 +1711082513215357334350403347356 56 67 18 32 48 27 18 39 381.46 0 66.40 +1711092513223333233327373037253 18 18 9 18 12 22 15 22 170.94 0 64.60 +1711102513232733373737373030268 12 18 22 22 22 22 15 15 181.05 0 67.20 +1711112513243023172017101013140 15 9 6 7 6 4 4 5 70.42 0 65.90 +1711122513251713 710 7101323100 6 5 3 4 3 4 5 9 50.21 0 68.00 +171113251326102010171023 7 7104 4 7 4 6 4 9 3 3 50.21 0 70.60 +1711142513272730271013201727171 12 15 12 4 5 7 6 12 90.52 9 72.80 +1711152514 11723273323332317196 6 9 12 18 9 18 9 6 110.63 9 72.60 +1711162514 240403020 7131727194 27 27 15 7 3 5 6 12 130.73 12 71.60 +1711172514 31017132313 0 310 89 4 6 5 9 5 0 2 4 40.21 16 74.70 +1711182514 41713201717131017124 6 5 7 6 6 5 4 6 60.31 10 74.30 +1711192514 5 7132317 3 3 7 7 80 3 5 9 6 2 2 3 3 40.10 0 72.70 +1711202514 610 3 0 0 7202030 90 4 2 0 0 3 7 7 15 50.21 0 71.80 +1711212514 74043433323373737293 27 32 32 18 9 22 22 22 231.15 0 71.40 +1711222514 82327172030202317177 9 12 6 7 15 7 9 6 90.52 0 71.60 +1711232514 91710202723171720151 6 4 7 12 9 6 6 7 70.42 0 70.60 +171124251410272013 3 3 73330136 12 7 5 2 2 3 18 15 80.42 0 72.20 +171125251411332310 7 0 7 7 3 90 18 9 4 3 0 3 3 2 50.21 11 72.40 +171126251412 0 010 0 3 310 7 33 0 0 4 0 2 2 4 3 20.00 13 73.50 +1711272514131310 7 3171013 7 80 5 4 3 2 6 4 5 3 40.10 12 71.70 +1711282514142720101010 710 7101 12 7 4 4 4 3 4 3 50.21 11 70.00 +171129251415101013 7 0 71317 77 4 4 5 3 0 3 5 6 40.10 9 70.60 +1711302514162337101020171717151 9 22 4 4 7 6 6 6 80.00 7 70.77 +171201251417102713 7132320 7120 4 12 5 3 5 9 7 3 60.31 0 68.30 +171202251418 7 0 3 0 320 7 7 47 3 0 2 0 2 7 3 3 20.00 0 69.50 +171203251419 3 0 0 3 0 0 0 7 13 2 0 0 2 0 0 0 3 10.00 0 67.00 +171204251420 3 0171320273037147 2 0 6 5 7 12 15 22 90.52 0 66.40 +1712052514213030374350403333296 15 15 22 32 48 27 18 18 241.26 0 66.00 +1712062514223037302027273020221 15 22 15 7 12 12 15 7 130.84 9 66.30 +1712072514232323201330272023179 9 9 7 5 15 12 7 9 90.52 7 65.90 +1712082514241313201317 71010103 5 5 7 5 6 3 4 4 50.21 0 67.80 +17120925142510 3 0 71313 7 3 56 4 2 0 3 5 5 3 2 30.10 0 69.00 +171210251426 0 010 3 3 7 313 39 0 0 4 2 2 3 2 5 20.00 0 69.80 +1712112514271023232330232313168 4 9 9 9 15 9 9 5 90.52 5 70.10 +1712122515 12327232310273727197 9 12 9 9 4 12 22 12 110.63 9 69.20 +1712132515 2 3 0131017202327113 2 0 5 4 6 7 9 12 60.31 0 69.90 +1712142515 32310 3 3 3 0 7 7 56 9 4 2 2 2 0 3 3 30.10 0 69.80 +1712152515 4 0 0 0 713 7 713 47 0 0 0 3 5 3 3 5 20.00 0 69.50 +1712162515 5 3 0 7 7 7 3 320 50 2 0 3 3 3 2 2 7 30.00 0 69.00 +1712172515 62730473330334337280 12 15 39 18 15 18 32 22 211.15 0 68.80 +1712182515 74037403030231310223 27 22 27 15 15 9 5 4 160.94 0 69.40 +1712192515 8 7 7 3 310202023 93 3 3 2 2 4 7 7 9 50.21 5 66.60 +1712202515 917171020 71013 0 94 6 6 4 7 3 4 5 0 40.21 9 71.80 +171221251510 3 7 710 7 3 0 0 37 2 3 3 4 3 2 0 0 20.00 14 73.60 +171222251511 3 3 3 0 0 0 010 19 2 2 2 0 0 0 0 4 10.00 16 72.90 +17122325151213231313 3 0 7 7 79 5 9 5 5 2 0 3 3 40.10 18 73.70 +1712242515131320202730301730187 5 7 7 12 15 15 6 15 100.63 18 73.60 +17122525151427 7202313172717151 12 3 7 9 5 6 12 6 80.42 16 73.20 +1712262515152727101713133330170 12 12 4 6 5 5 18 15 100.52 11 69.50 +17122725151620231310 7271720137 7 9 5 4 3 12 6 7 70.31 9 68.60 +171228251517 7 3131010131017 83 3 2 5 4 4 5 4 6 40.10 0 68.80 +171229251518 7 7 3 3 71020 7 64 3 3 2 2 3 4 7 3 30.10 0 69.10 +171230251519 710 3 0 3 7 317 50 3 4 2 0 2 3 2 6 30.00 0 68.10 +171231251520 3 0 3 3 0 7 310 29 2 2 2 2 2 3 2 4 20.00 5 68.67 diff --git a/RMextract/pyiriplas/kp2018 b/RMextract/pyiriplas/kp2018 index e25979e..3abec3c 100644 --- a/RMextract/pyiriplas/kp2018 +++ b/RMextract/pyiriplas/kp2018 @@ -1,299 +1,299 @@ -1801012515213033202327 71013163 15 18 7 9 12 3 4 5 9 .52 0 66.80 -1801022515221310 0 713101710 80 5 4 0 3 5 4 6 4 4 .10 0 67.20 -180103251523 3 71010 310 3 0 46 2 3 4 4 2 4 2 0 3 .00 0 68.30 -180104251524 7 010 0 3 31310 46 3 0 4 0 2 2 5 4 2 .00 9 67.20 -180105251525 71713 7 7101013 84 3 6 5 3 3 4 4 5 4 .10 7 67.00 -18010625152613 0 3 0 3 0 3 3 25 5 0 2 0 2 0 2 2 2 .00 7 67.10 -18010725152710 0 0 0 0 3 7 3 23 4 0 0 0 0 2 3 2 1 .00 0 67.60 -1801082516 1 3 7231333302013142 2 3 9 5 18 15 7 5 8 .42 9 68.00 -1801092516 23723231317171013153 22 9 9 5 6 6 4 5 8 .42 8 68.50 -1801102516 3131310 7 3 7 7 3 63 5 5 4 3 2 3 3 2 3 .10 14 68.10 -1801112516 4 310 0 3 3 0 3 7 29 2 4 0 2 2 0 2 3 2 .00 7 68.50 -1801122516 51013 710 713 7 3 70 4 5 3 4 3 5 3 2 4 .10 0 68.60 -1801132516 6 3 3101017132717100 2 2 4 4 6 5 12 6 5 .21 0 68.50 -1801142516 7404020101317 723170 27 27 7 4 5 6 3 9 11 .63 0 68.20 -1801152516 833202710 7201317147 18 7 12 4 3 7 5 6 8 .42 8 67.90 -1801162516 920 3 710 7 3 7 7 64 7 2 3 4 3 2 3 3 3 .10 11 68.80 -180117251610 0 0 0 3 3 0 0 3 9 0 0 0 2 2 0 0 2 1 .00 12 68.60 -180118251611 0 3 0 0 0 3 3 7 16 0 2 0 0 0 2 2 3 1 .00 9 68.80 -18011925161210272317 3 31723123 4 12 9 6 2 2 6 9 6 .31 5 68.50 -18012025161327272710 3 71013124 12 12 12 4 2 3 4 5 7 .31 0 67.40 -18012125161410 7171723172723141 4 3 6 6 9 6 12 9 7 .31 0 66.10 -18012225161530271717 7203027175 15 12 6 6 3 7 15 12 10 .52 0 67.90 -1801232516161713 3 71010 3 3 66 6 5 2 3 4 4 2 2 4 .10 0 68.30 -180124251617 0 3 7 727301033117 0 2 3 3 12 15 4 18 7 .42 0 67.70 -1801252516183023201713271720167 15 9 7 6 5 12 6 7 8 .52 0 68.20 -18012625161930202710 3 71317127 15 7 12 4 2 3 5 6 7 .31 0 67.70 -1801272516202313 713 7131710103 9 5 3 5 3 5 6 4 5 .21 0 66.70 -18012825162110 3 0 317 3 717 60 4 2 0 2 6 2 3 6 3 .10 0 66.40 -180129251622 7 31013 7 7 7 7 61 3 2 4 5 3 3 3 3 3 .10 0 66.20 -180130251623 72313 7 0 0 3 3 56 3 9 5 3 0 0 2 2 3 .10 0 66.90 -180131251624 0 0172020101010 87 0 0 6 7 7 4 4 4 0 .00 5 66.50 -18020125162520 3 3 3 3 31317 65 7 2 2 2 2 2 5 6 4 .10 0 67.00 -18020225162620 7 7 7 3 3 7 3 57 7 3 3 3 2 2 3 2 3 .10 0 66.80 -180203251627 3 010 7 3 31313 52 2 0 4 3 2 2 5 5 3 .10 0 67.30 -1802042517 1 7 0 0 3 7 720 7 51 3 0 0 2 3 3 7 3 3 .00 0 71.00 -1802052517 2232020202317 7 3133 9 7 7 7 9 6 3 2 6 .31 11 72.00 -1802062517 3 320131710 0 713 83 2 7 5 6 4 0 3 5 4 .10 12 74.80 -1802072517 4 3 3 71013 0 0 0 36 2 2 3 4 5 0 0 0 2 .00 15 74.60 -1802082517 5 310 3 7 3 0 317 46 2 4 2 3 2 0 2 6 3 .00 17 75.50 -1802092517 6132710 0 0 0 323 76 5 12 4 0 0 0 2 9 4 .10 18 76.10 -1802102517 710201023201313 3112 4 7 4 9 7 5 5 2 5 .21 18 76.20 -1802112517 8 7 0 3 3 3 7 0 3 26 3 0 2 2 2 3 0 2 2 .00 21 76.20 -1802122517 9 31013 7 3 317 7 63 2 4 5 3 2 2 6 3 3 .10 20 76.60 -180213251710 010 7 7 3 3 313 46 0 4 3 3 2 2 2 5 3 .00 18 74.10 -18021425171110 0 0 3 0 0 713 33 4 0 0 2 0 0 3 5 2 .00 16 73.40 -18021525171210 0231320402727160 4 0 9 5 7 27 12 12 10 .52 12 70.80 -18021625171323232313 3101723135 9 9 9 5 2 4 6 9 7 .31 9 69.80 -1802172517143037271327171023184 15 22 12 5 12 6 4 9 11 .63 0 67.40 -1802182517154020232030332323212 27 7 9 7 15 18 9 9 13 .73 0 68.70 -1802192517164340202027173723227 32 27 7 7 12 6 22 9 15 .94 0 67.50 -18022025171723 0 3 310 7 3 0 49 9 0 2 2 4 3 2 0 3 .00 0 66.30 -180221251718 0 01017 3 3 7 3 43 0 0 4 6 2 2 3 2 2 .00 0 66.10 -1802222517191710101720273730168 6 4 4 6 7 12 22 15 10 .52 0 67.00 -1802232517201737334317203020217 6 22 18 32 6 7 15 7 14 .84 0 66.20 -1802242517213027231710 3 313126 15 12 9 6 4 2 2 5 7 .31 0 66.80 -180225251722 7 0 7 0 0131313 53 3 0 3 0 0 5 5 5 3 .00 0 65.90 -180226251723201317131010 330116 7 5 6 5 4 4 2 15 6 .31 12 68.40 -18022725172440502023432310 7216 27 48 7 9 32 9 4 3 17 .94 12 66.60 -1802282517252020101717201713134 7 7 4 6 6 7 6 5 6 .00 8 66.97 -180301251726 313101010 72323 99 2 5 4 4 4 3 9 9 5 .21 0 66.00 -18030225172720 3 3 3 3 3 710 52 7 2 2 2 2 2 3 4 3 .10 0 66.60 -1803032518 110 0131713101323 99 4 0 5 6 5 4 5 9 5 .21 0 66.70 -1803042518 2232313 71013 7 7103 9 9 5 3 4 5 3 3 5 .21 0 66.40 -1803052518 313 31013 7131013 82 5 2 4 5 3 5 4 5 4 .10 0 66.50 -1803062518 413 7 7 71017 3 7 71 5 3 3 3 4 6 2 3 4 .10 0 66.50 -1803072518 5 3 010 0 0 32310 49 2 0 4 0 0 2 9 4 3 .00 0 66.80 -1803082518 6 71317 7 3 0 7 3 57 3 5 6 3 2 0 3 2 3 .10 0 65.60 -1803092518 72727 710 7102340151 12 12 3 4 3 4 9 27 9 .52 0 66.60 -1803102518 83733231317132017173 22 18 9 5 6 5 7 6 10 .52 0 66.80 -1803112518 9231713 3 3 310 7 79 9 6 5 2 2 2 4 3 4 .10 0 66.90 -180312251810 7 0 0 3 710 3 0 30 3 0 0 2 3 4 2 0 2 .00 0 67.30 -180313251811 0 310 710 7 7 7 51 0 2 4 3 4 3 3 3 3 .00 0 67.70 -180314251812 7 310 713332737137 3 2 4 3 5 18 12 22 9 .52 0 66.90 -1803152518134023172317273033210 27 9 6 9 6 12 15 18 13 .73 0 68.30 -1803162518143343272327372733250 18 32 12 9 12 22 12 18 17 .94 0 67.90 -1803172518154027231317132033186 27 12 9 5 6 5 7 18 11 .63 0 69.00 -1803182518162723101330374357240 12 9 4 5 15 22 32 67 211.15 5 68.50 -180319251817433330 717172033200 32 18 15 3 6 6 7 18 13 .84 0 69.70 -1803202518182327 3 310 71713103 9 12 2 2 4 3 6 5 5 .21 0 68.20 -1803212518191017 3 0 3 31713 66 4 6 2 0 2 2 6 5 3 .10 0 68.80 -1803222518201020 0 3 7132330106 4 7 0 2 3 5 9 15 6 .31 0 68.00 -1803232518213730132717133340210 22 15 5 12 6 5 18 27 14 .84 0 67.70 -1803242518222017132017172030154 7 6 5 7 6 6 7 15 7 .42 0 67.20 -1803252518233037273323232340236 15 22 12 18 9 9 9 27 15 .94 0 68.00 -1803262518243027232010232723183 15 12 9 7 4 9 12 9 10 .52 0 67.50 -180327251825272723172010 3 7134 12 12 9 6 7 4 2 3 7 .31 0 68.00 -180328251826 7 7 7 0 3 0 3 3 30 3 3 3 0 2 0 2 2 2 .00 0 68.30 -180329251827 3 0 717 713 710 64 2 0 3 6 3 5 3 4 3 .10 0 68.80 -1803302519 11320 71013 7 7 7 84 5 7 3 4 5 3 3 3 4 .10 8 68.60 -1803312519 22717101313131010113 12 6 4 5 5 5 4 4 5 .00 8 68.57 -1804012519 31310101710101010 90 5 4 4 6 4 4 4 4 4 .21 5 68.90 -1804022519 417 7 3 713101010 77 6 3 2 3 5 4 4 4 4 .10 0 68.40 -1804032519 51320 7 0 0 0 0 3 43 5 7 3 0 0 0 0 2 2 .00 0 67.80 -1804042519 6 3 0 31313131320 78 2 0 2 5 5 5 5 7 4 .10 0 68.60 -1804052519 7272310 313233017146 12 9 4 2 5 9 15 6 8 .42 0 66.40 -1804062519 8 7 3 3 7 313 7 7 50 3 2 2 3 2 5 3 3 3 .10 0 67.40 -1804072519 9 310 7 3 710 317 60 2 4 3 2 3 4 2 6 3 .10 0 67.00 -1804082519101013 3 7 0131720 83 4 5 2 3 0 5 6 7 4 .10 0 68.10 -1804092519111713201717202740171 6 5 7 6 6 7 12 27 10 .52 0 68.90 -1804102519122040372733272333240 7 27 22 12 18 12 9 18 16 .94 5 68.80 -1804112519134033301713 71020170 27 18 15 6 5 3 4 7 11 .63 0 68.60 -1804122519141717231317132327150 6 6 9 5 6 5 9 12 7 .42 5 70.40 -1804132519154023201310 72023156 27 9 7 5 4 3 7 9 9 .52 10 70.10 -1804142519162010 0 717171317101 7 4 0 3 6 6 5 6 5 .21 0 69.90 -180415251917201313 713 7 717 97 7 5 5 3 5 3 3 6 5 .21 5 71.00 -18041625191810 7 0 3 3 3 010 36 4 3 0 2 2 2 0 4 2 .00 5 69.70 -18041725191910 7 7 0 3 3 313 46 4 3 3 0 2 2 2 5 3 .00 7 69.80 -1804182519201313 710171313 7 93 5 5 3 4 6 5 5 3 4 .21 0 71.40 -180419251921 3 3 010 3 0 3 3 25 2 2 0 4 2 0 2 2 2 .00 5 71.40 -1804202519223740575743475333367 22 27 67 67 32 39 56 18 411.57 11 73.70 -1804212519233023272023302313189 15 9 12 7 9 15 9 5 10 .63 17 77.50 -180422251924101310 317 71017 87 4 5 4 2 6 3 4 6 4 .10 14 76.50 -1804232519252717 3 0 7 72720108 12 6 2 0 3 3 12 7 6 .31 15 74.70 -180424251926 7 010 313131717 80 3 0 4 2 5 5 6 6 4 .10 14 73.70 -1804252519272017 7 7 3 3 013 70 7 6 3 3 2 2 0 5 4 .10 12 71.60 -1804262520 113 7 313 7 3 317 66 5 3 2 5 3 2 2 6 4 .10 9 70.30 -1804272520 213 0 0 713271720 97 5 0 0 3 5 12 6 7 5 .21 9 69.60 -1804282520 317 7 3 310 7 3 3 53 6 3 2 2 4 3 2 2 3 .10 0 71.10 -1804292520 4 3 010 71013 313 59 2 0 4 3 4 5 2 5 3 .10 0 72.20 -1804302520 52317 7 31713 713100 9 6 3 2 6 5 3 5 4 .00 0 70.97 -1805012520 6 3 3 7 3 3 3 7 7 36 2 2 3 2 2 2 3 3 2 .00 0 69.50 -1805022520 710171310 7 7 3 0 67 4 6 5 4 3 3 2 0 3 .10 0 68.10 -1805032520 8 7 3 3 3 7 7 717 54 3 2 2 2 3 3 3 6 3 .10 0 67.60 -1805042520 9 3 713 7 7 71010 64 2 3 5 3 3 3 4 4 3 .10 8 68.90 -180505252010 710 32737474057228 3 4 2 12 22 39 27 67 221.15 10 68.70 -1805062520115337272730274043284 56 22 12 12 15 12 27 32 241.15 10 68.40 -1805072520124037271727302330231 27 22 12 6 12 15 9 15 15 .84 11 70.90 -1805082520132330232723333723219 9 15 9 12 9 18 22 9 13 .73 14 70.90 -1805092520143323231723234037219 18 9 9 6 9 9 27 22 14 .84 14 70.90 -180510252015332027202027 723177 18 7 12 7 7 12 3 9 9 .52 8 71.00 -1805112520161733331723173333206 6 18 18 6 9 6 18 18 12 .73 7 71.70 -18051225201727331313 7 71720137 12 18 5 5 3 3 6 7 7 .42 9 71.20 -180513252018 717201723201723144 3 6 7 6 9 7 6 9 7 .31 7 72.40 -180514252019 71010 7 7131020 84 3 4 4 3 3 5 4 7 4 .10 0 71.80 -180515252020 7 710 3 7131013 70 3 3 4 2 3 5 4 5 4 .10 0 71.90 -180516252021 3 3 3 310 71313 55 2 2 2 2 4 3 5 5 3 .10 0 71.50 -1805172520222717172327232020174 12 6 6 9 12 9 7 7 8 .52 0 70.50 -1805182520231313 3101310 710 79 5 5 2 4 5 4 3 4 4 .10 0 71.10 -180519252024 0 0 0 3 7 710 7 34 0 0 0 2 3 3 4 3 2 .00 0 71.90 -180520252025 710 7 3 7 3 0 3 40 3 4 3 2 3 2 0 2 2 .00 0 70.40 -180521252026 3 7 0 7 0 3 010 30 2 3 0 3 0 2 0 4 2 .00 7 71.30 -180522252027 3 7171017131717101 2 3 6 4 6 5 6 6 5 .21 9 72.60 -1805232521 1132027272313 313139 5 7 12 12 9 5 2 5 7 .42 18 75.00 -1805242521 21313 3 3 7 7 3 7 56 5 5 2 2 3 3 2 3 3 .10 24 75.60 -1805252521 310 7 3 31010 7 0 50 4 3 2 2 4 4 3 0 3 .00 23 77.70 -1805262521 4 3 7 0 3 7 31013 46 2 3 0 2 3 2 4 5 3 .00 19 74.90 -1805272521 51010 310 3 3 3 7 49 4 4 2 4 2 2 2 3 3 .10 19 76.60 -1805282521 6 71010 71310 7 7 71 3 4 4 3 5 4 3 3 4 .10 14 78.90 -1805292521 7 713 7 7 7 310 7 61 3 5 3 3 3 2 4 3 3 .10 17 77.00 -1805302521 8 3 3 7 3 3 71317 56 2 2 3 2 2 3 5 6 3 .10 15 77.30 -1805312521 91310 31013101317 89 5 4 2 4 5 4 5 6 4 .00 15 77.73 -1806012521103337434347332323282 18 22 32 32 39 18 9 9 221.15 16 76.90 -1806022521112337271723203737221 9 22 12 6 9 7 22 22 14 .84 16 76.50 -1806032521122717101727231720158 12 6 4 6 12 9 6 7 8 .42 9 75.70 -180604252113 7131013 31013 7 76 3 5 4 5 2 4 5 3 4 .10 0 72.60 -18060525211417171013171317 7111 6 6 4 5 6 5 6 3 5 .21 0 73.40 -180606252115 710 3 310202720100 3 4 2 2 4 7 12 7 5 .21 5 73.20 -18060725211627131010 3 71013 93 12 5 4 4 2 3 4 5 5 .21 0 71.30 -1806082521171017 31710 3 0 3 63 4 6 2 6 4 2 0 2 3 .10 0 70.20 -180609252118 7 3 710 3 713 7 57 3 2 3 4 2 3 5 3 3 .10 0 68.80 -180610252119 310 0 0 3 7 7 3 33 2 4 0 0 2 3 3 2 2 .00 0 72.40 -18061125212010 3 3 3 710 313 52 4 2 2 2 3 4 2 5 3 .10 0 72.00 -1806122521211313 3 0 3 3 310 48 5 5 2 0 2 2 2 4 3 .00 8 72.50 -180613252122 0 7 7 3 3 31320 56 0 3 3 2 2 2 5 7 3 .10 11 73.00 -18061425212317101310 7 7 710 81 6 4 5 4 3 3 3 4 4 .10 11 74.70 -180615252124 7 7 7 7 31010 7 58 3 3 3 3 2 4 4 3 3 .10 10 72.80 -180616252125 3 7 3 0 3 3 310 32 2 3 2 0 2 2 2 4 2 .00 10 72.70 -180617252126 710 7 3 3101717 74 3 4 3 2 2 4 6 6 4 .10 9 74.60 -1806182521274330333330231723232 32 15 18 18 15 9 6 9 15 .94 20 76.10 -1806192522 11317231710 7 713107 5 6 9 6 4 3 3 5 5 .21 24 79.00 -1806202522 2 7172017 7 7 710 92 3 6 7 6 3 3 3 4 4 .21 39 84.70 -1806212522 3 7 7 7 7 0 3 3 3 37 3 3 3 3 0 2 2 2 2 .00 36 84.20 -1806222522 4 31010 3 3 713 7 56 2 4 4 2 2 3 5 3 3 .10 30 83.00 -1806232522 52327173737302737235 9 12 6 22 22 15 12 22 15 .84 27 79.70 -1806242522 62317201717 71313127 9 6 7 6 6 3 5 5 6 .31 17 77.00 -1806252522 710 7 71720172750155 4 3 3 6 7 6 12 48 11 .63 12 75.20 -1806262522 84733273337303020257 39 18 12 18 22 15 15 7 181.05 11 73.40 -1806272522 91023131317101027123 4 9 5 5 6 4 4 12 6 .31 6 72.40 -18062825221017 7 710171313 7 91 6 3 3 4 6 5 5 3 4 .21 0 71.90 -180629252211 713 7 7 7 7 3 0 51 3 5 3 3 3 3 2 0 3 .00 0 70.90 -180630252212 3 31010 710 7 7 57 2 2 4 4 3 4 3 3 3 .00 0 71.73 -180701252213 3 3 3 3 0 0 3 3 18 2 2 2 2 0 0 2 2 2 .00 0 70.40 -180702252214 3 3 3 3 7 7 3 0 29 2 2 2 2 3 3 2 0 2 .00 0 68.80 -180703252215 0 3 0 31317 710 53 0 2 0 2 5 6 3 4 3 .00 0 70.50 -180704252216 7 710 7101010 7 68 3 3 4 3 4 4 4 3 4 .10 0 70.20 -1807052522172010 32033434740216 7 4 2 7 18 32 39 27 17 .94 0 70.40 -1807062522183317 72010 7 720121 18 6 3 7 4 3 3 7 6 .31 0 72.90 -1807072522191713 7 7 7131710 91 6 5 3 3 3 5 6 4 4 .21 0 74.40 -18070825222010 710 710 3 710 64 4 3 4 3 4 2 3 4 3 .10 0 74.00 -180709252221 3 7 7 3 7 7 3 7 44 2 3 3 2 3 3 2 3 3 .00 0 75.40 -18071025222213231713201710 7120 5 9 6 5 7 6 4 3 6 .31 0 74.50 -180711252223 717202327172317151 3 6 7 9 12 6 9 6 7 .42 0 75.80 -1807122522241320201317131313122 5 7 7 5 6 5 5 5 6 .31 0 74.60 -180713252225231713 7 710 7 3 87 9 6 5 3 3 4 3 2 4 .21 0 74.90 -1807142522261310101010 3 7 0 63 5 4 4 4 4 2 3 0 3 .10 0 74.70 -18071525222710 7 3 3 3 7 7 3 43 4 3 2 2 2 3 3 2 3 .00 0 74.10 -1807162523 1 7172717 7202330148 3 6 12 6 3 7 9 15 8 .42 0 74.30 -1807172523 210303010 710 310110 4 15 15 4 3 4 2 4 6 .31 0 73.50 -1807182523 3 7 7 7 3 7 31010 54 3 3 3 2 3 2 4 4 3 .10 0 73.60 -1807192523 4 7 3 7 7 3 713 7 54 3 2 3 3 2 3 5 3 3 .10 0 72.80 -1807202523 517 7102017101720118 6 3 4 7 6 4 6 7 5 .21 0 72.70 -1807212523 61717302733231317177 6 6 15 12 18 9 5 6 10 .52 0 72.20 -1807222523 7171013131013 7 7 90 6 4 5 5 4 5 3 3 4 .21 0 70.40 -1807232523 8 3 7 7 7 3 31010 50 2 3 3 3 2 2 4 4 3 .10 0 69.10 -1807242523 93730332717272333227 22 15 18 12 6 12 9 18 14 .84 0 69.00 -1807252523103033171310101017140 15 18 6 5 4 4 4 6 8 .42 0 67.90 -180726252311 710 3 710 7 7 7 58 3 4 2 3 4 3 3 3 3 .10 0 68.30 -180727252312 7 7 3 3 3 3 713 46 3 3 2 2 2 2 3 5 3 .00 0 68.60 -1807282523131313 71710 310 7 80 5 5 3 6 4 2 4 3 4 .10 0 70.00 -18072925231413 710 7 7 71310 74 5 3 4 3 3 3 5 4 4 .10 0 70.00 -180730252315 7 3 0 317101717 74 3 2 0 2 6 4 6 6 4 .10 0 69.70 -18073125231617 7101017101717105 6 3 4 4 6 4 6 6 4 .00 0 69.90 -18080125231720 7 31013171720107 7 3 2 4 5 6 6 7 5 .21 8 72.30 -1808022523182717171013 3 0 3 90 12 6 6 4 5 2 0 2 5 .21 8 72.00 -180803252319 71010232013 3 7 93 3 4 4 9 7 5 2 3 5 .21 0 72.30 -1808042523202020 710 3 3 310 76 7 7 3 4 2 2 2 4 4 .10 0 72.50 -180805252321 710 7201010 0 7 71 3 4 3 7 4 4 0 3 4 .10 0 71.20 -180806252322 0 7 71010 310 3 50 0 3 3 4 4 2 4 2 3 .00 0 71.10 -1808072523232017101730202720161 7 6 4 6 15 7 12 7 8 .42 0 71.50 -180808252324 7 7131313101010 83 3 3 5 5 5 4 4 4 4 .10 0 71.60 -18080925232510 71310 7 3 710 67 4 3 5 4 3 2 3 4 4 .10 0 72.20 -18081025232610 7 3 3 7101010 60 4 3 2 2 3 4 4 4 3 .10 0 71.40 -1808112523271317171730232040177 5 6 6 6 15 9 7 27 10 .63 0 69.30 -1808122524 113 7 71713 71717 98 5 3 3 6 5 3 6 6 5 .21 0 69.90 -1808132524 2 3 7 71010 3 313 56 2 3 3 4 4 2 2 5 3 .10 0 69.60 -1808142524 313 3 310 3 7 010 49 5 2 2 4 2 3 0 4 3 .00 8 70.50 -1808152524 41710172740303333207 6 4 6 12 27 15 18 18 13 .84 9 70.60 -1808162524 53323172323131323168 18 9 6 9 9 5 5 9 9 .52 9 70.00 -1808172524 62737201710 32730171 12 22 7 6 4 2 12 15 10 .63 8 69.00 -1808182524 71727332723201017174 6 12 18 12 9 7 4 6 9 .52 7 68.90 -1808192524 817131013 7272023130 6 5 4 5 3 12 7 9 6 .31 12 68.40 -1808202524 93333132023273723209 18 18 5 7 9 12 22 9 12 .73 11 69.60 -18082125241023102017 710 720114 9 4 7 6 3 4 3 7 5 .21 11 69.40 -180822252411172013 310 7 320 93 6 7 5 2 4 3 2 7 4 .21 0 68.40 -18082325241220 7 7 310 710 7 71 7 3 3 2 4 3 4 3 4 .10 11 71.10 -180824252413 0 7101023 7 7 7 71 0 3 4 4 9 3 3 3 4 .10 20 74.00 -180825252414 710202323133043169 3 4 7 9 9 5 15 32 10 .63 23 73.10 -1808262524155367735043605023419 56111154 48 32 80 48 9 671.77 21 72.60 -1808272524161323273330534730256 5 9 12 18 15 56 39 15 211.15 9 71.00 -1808282524173323172320 7 3 7133 18 9 6 9 7 3 2 3 7 .42 7 71.20 -1808292524182313 7 7 7171313100 9 5 3 3 3 6 5 5 5 .21 0 71.80 -18083025241913 7 7 0 3 31020 63 5 3 3 0 2 2 4 7 3 .10 0 69.60 -18083125242013 7 7 710 71017 78 5 3 3 3 4 3 4 6 3 .00 0 70.87 -18090125242110 7 3 313 71713 73 4 3 2 2 5 3 6 5 4 .10 0 69.50 -180902252422131710 3 3101320 89 5 6 4 2 2 4 5 7 4 .21 0 68.90 -1809032524231013 3 3 7 7 717 67 4 5 2 2 3 3 3 6 4 .10 0 69.30 -180904252424172723 7 7132030144 6 12 9 3 3 5 7 15 8 .42 0 68.60 -1809052524253327132727171310167 18 12 5 12 12 6 5 4 9 .52 0 68.60 -180906252426201313 3 7 71017 90 7 5 5 2 3 3 4 6 4 .21 0 68.40 -1809072524272017 7 71010 310 84 7 6 3 3 4 4 2 4 4 .10 0 68.60 -1809082525 1 7 023 7 310 720 77 3 0 9 3 2 4 3 7 4 .10 11 69.70 -1809092525 2201010 313131723109 7 4 4 2 5 5 6 9 5 .21 10 69.40 -1809102525 3 3 3 72327504347203 2 2 3 9 12 48 32 39 181.05 7 69.90 -1809112525 43347535330273323299 18 39 56 56 15 12 18 9 281.26 10 70.30 -1809122525 52017101313202037150 7 6 4 5 5 7 7 22 8 .42 9 70.60 -1809132525 63737303330302027244 22 22 15 18 15 15 7 12 16 .94 0 70.50 -1809142525 74340202020202723213 32 27 7 7 7 7 12 9 14 .84 0 69.80 -1809152525 8231720172010 723137 9 6 7 6 7 4 3 9 6 .31 0 69.20 -1809162525 913201013 7 01020 93 5 7 4 5 3 0 4 7 4 .21 0 69.80 -1809172525103023171717232327177 15 9 6 6 6 9 9 12 9 .52 9 68.50 -18091825251123171720 7 7 713111 9 6 6 7 3 3 3 5 5 .21 0 68.80 -180919252512102313 7 3 7 0 3 66 4 9 5 3 2 3 0 2 4 .10 0 68.50 -180920252513 3 0 3 3 3 0 0 0 12 2 0 2 2 2 0 0 0 1 .00 0 67.20 -180921252514 3 7 3 7 7101740 94 2 3 2 3 3 4 6 27 6 .31 0 67.40 -1809222525154337303740273733284 32 22 15 22 27 12 22 18 211.15 0 68.40 -1809232525163323172323202023182 18 9 6 9 9 7 7 9 9 .52 0 68.90 -1809242525172323131710 71717127 9 9 5 6 4 3 6 6 6 .31 0 69.00 -1809252525182323102327202327176 9 9 4 9 12 7 9 12 9 .52 0 68.00 -180926252519101320 713201027120 4 5 7 3 5 7 4 12 6 .31 0 69.30 -1809272525201320132017 3 323112 5 7 5 7 6 2 2 9 5 .21 0 67.40 -180928252521302727 7 3 3 317117 15 12 12 3 2 2 2 6 7 .31 0 69.40 -1809292525222027232723171330180 7 12 9 12 9 6 5 15 9 .52 0 68.90 -1809302525231727 3 710171323117 6 12 2 3 4 6 5 9 5 .00 11 68.57 -181001252524 013 71337232023136 0 5 3 5 22 9 7 9 8 .42 12 70.30 -181002252525372720 713 317 3127 22 12 7 3 5 2 6 2 7 .42 10 67.10 -181003252526 7 7 717 7101723 95 3 3 3 6 3 4 6 9 5 .21 9 68.40 -18100425252710 3 3 3 7131310 62 4 2 2 2 3 5 5 4 3 .10 7 67.80 -1810052526 13023172020 71023150 15 9 6 7 7 3 4 9 8 .42 0 68.70 -1810062526 227101013 3 3 0 3 69 12 4 4 5 2 2 0 2 4 .10 0 68.60 -1810072526 3 7 7102337504740221 3 3 4 9 22 48 39 27 191.05 0 69.40 -1810082526 44040332043331713239 27 27 18 7 32 18 6 5 181.05 0 68.70 -1810092526 53023303327332330229 15 9 15 18 12 18 9 15 14 .84 0 69.30 -1810102526 630 7172033274723204 15 3 6 7 18 12 39 9 14 .84 0 69.60 -1810112526 73027171320201713157 15 12 6 5 7 7 6 5 8 .42 5 70.60 -1810122526 813171010 3101313 89 5 6 4 4 2 4 5 5 4 .21 9 71.30 -1810132526 9102313 313403737176 4 9 5 2 5 27 22 22 12 .73 18 72.10 -1810142526101713101710131317110 6 5 4 6 4 5 5 6 5 .21 16 71.10 -1810152526113017171720232323170 15 6 6 6 7 9 9 9 8 .52 9 69.60 -18101625261220 3 7171317 3 7 87 7 2 3 6 5 6 2 3 4 .10 0 69.30 -181017252613 31017 3 0 3 0 3 39 2 4 6 2 0 2 0 2 2 .00 7 69.60 -181018252614 3 0 3 0 0 0 0 3 9 2 0 2 0 0 0 0 2 1 .00 0 69.00 -181019252615 3 0 3 3 3 0 3 7 22 2 0 2 2 2 0 2 3 2 .00 0 69.00 -181020252616 3 0 0 0 3 0 3 3 12 2 0 0 0 2 0 2 2 1 .00 0 69.80 -181021252617 3 0 02020131010 76 2 0 0 7 7 5 4 4 4 .10 0 70.40 -181022252618271717 710 7 710102 12 6 6 3 4 3 3 4 5 .21 0 70.20 -1810232526191710 3 7 3 3 0 3 46 6 4 2 3 2 2 0 2 3 .00 0 70.90 +1801012515213033202327 71013163 15 18 7 9 12 3 4 5 9 .52 0 66.80 +1801022515221310 0 713101710 80 5 4 0 3 5 4 6 4 4 .10 0 67.20 +180103251523 3 71010 310 3 0 46 2 3 4 4 2 4 2 0 3 .00 0 68.30 +180104251524 7 010 0 3 31310 46 3 0 4 0 2 2 5 4 2 .00 9 67.20 +180105251525 71713 7 7101013 84 3 6 5 3 3 4 4 5 4 .10 7 67.00 +18010625152613 0 3 0 3 0 3 3 25 5 0 2 0 2 0 2 2 2 .00 7 67.10 +18010725152710 0 0 0 0 3 7 3 23 4 0 0 0 0 2 3 2 1 .00 0 67.60 +1801082516 1 3 7231333302013142 2 3 9 5 18 15 7 5 8 .42 9 68.00 +1801092516 23723231317171013153 22 9 9 5 6 6 4 5 8 .42 8 68.50 +1801102516 3131310 7 3 7 7 3 63 5 5 4 3 2 3 3 2 3 .10 14 68.10 +1801112516 4 310 0 3 3 0 3 7 29 2 4 0 2 2 0 2 3 2 .00 7 68.50 +1801122516 51013 710 713 7 3 70 4 5 3 4 3 5 3 2 4 .10 0 68.60 +1801132516 6 3 3101017132717100 2 2 4 4 6 5 12 6 5 .21 0 68.50 +1801142516 7404020101317 723170 27 27 7 4 5 6 3 9 11 .63 0 68.20 +1801152516 833202710 7201317147 18 7 12 4 3 7 5 6 8 .42 8 67.90 +1801162516 920 3 710 7 3 7 7 64 7 2 3 4 3 2 3 3 3 .10 11 68.80 +180117251610 0 0 0 3 3 0 0 3 9 0 0 0 2 2 0 0 2 1 .00 12 68.60 +180118251611 0 3 0 0 0 3 3 7 16 0 2 0 0 0 2 2 3 1 .00 9 68.80 +18011925161210272317 3 31723123 4 12 9 6 2 2 6 9 6 .31 5 68.50 +18012025161327272710 3 71013124 12 12 12 4 2 3 4 5 7 .31 0 67.40 +18012125161410 7171723172723141 4 3 6 6 9 6 12 9 7 .31 0 66.10 +18012225161530271717 7203027175 15 12 6 6 3 7 15 12 10 .52 0 67.90 +1801232516161713 3 71010 3 3 66 6 5 2 3 4 4 2 2 4 .10 0 68.30 +180124251617 0 3 7 727301033117 0 2 3 3 12 15 4 18 7 .42 0 67.70 +1801252516183023201713271720167 15 9 7 6 5 12 6 7 8 .52 0 68.20 +18012625161930202710 3 71317127 15 7 12 4 2 3 5 6 7 .31 0 67.70 +1801272516202313 713 7131710103 9 5 3 5 3 5 6 4 5 .21 0 66.70 +18012825162110 3 0 317 3 717 60 4 2 0 2 6 2 3 6 3 .10 0 66.40 +180129251622 7 31013 7 7 7 7 61 3 2 4 5 3 3 3 3 3 .10 0 66.20 +180130251623 72313 7 0 0 3 3 56 3 9 5 3 0 0 2 2 3 .10 0 66.90 +180131251624 0 0172020101010 87 0 0 6 7 7 4 4 4 0 .00 5 66.50 +18020125162520 3 3 3 3 31317 65 7 2 2 2 2 2 5 6 4 .10 0 67.00 +18020225162620 7 7 7 3 3 7 3 57 7 3 3 3 2 2 3 2 3 .10 0 66.80 +180203251627 3 010 7 3 31313 52 2 0 4 3 2 2 5 5 3 .10 0 67.30 +1802042517 1 7 0 0 3 7 720 7 51 3 0 0 2 3 3 7 3 3 .00 0 71.00 +1802052517 2232020202317 7 3133 9 7 7 7 9 6 3 2 6 .31 11 72.00 +1802062517 3 320131710 0 713 83 2 7 5 6 4 0 3 5 4 .10 12 74.80 +1802072517 4 3 3 71013 0 0 0 36 2 2 3 4 5 0 0 0 2 .00 15 74.60 +1802082517 5 310 3 7 3 0 317 46 2 4 2 3 2 0 2 6 3 .00 17 75.50 +1802092517 6132710 0 0 0 323 76 5 12 4 0 0 0 2 9 4 .10 18 76.10 +1802102517 710201023201313 3112 4 7 4 9 7 5 5 2 5 .21 18 76.20 +1802112517 8 7 0 3 3 3 7 0 3 26 3 0 2 2 2 3 0 2 2 .00 21 76.20 +1802122517 9 31013 7 3 317 7 63 2 4 5 3 2 2 6 3 3 .10 20 76.60 +180213251710 010 7 7 3 3 313 46 0 4 3 3 2 2 2 5 3 .00 18 74.10 +18021425171110 0 0 3 0 0 713 33 4 0 0 2 0 0 3 5 2 .00 16 73.40 +18021525171210 0231320402727160 4 0 9 5 7 27 12 12 10 .52 12 70.80 +18021625171323232313 3101723135 9 9 9 5 2 4 6 9 7 .31 9 69.80 +1802172517143037271327171023184 15 22 12 5 12 6 4 9 11 .63 0 67.40 +1802182517154020232030332323212 27 7 9 7 15 18 9 9 13 .73 0 68.70 +1802192517164340202027173723227 32 27 7 7 12 6 22 9 15 .94 0 67.50 +18022025171723 0 3 310 7 3 0 49 9 0 2 2 4 3 2 0 3 .00 0 66.30 +180221251718 0 01017 3 3 7 3 43 0 0 4 6 2 2 3 2 2 .00 0 66.10 +1802222517191710101720273730168 6 4 4 6 7 12 22 15 10 .52 0 67.00 +1802232517201737334317203020217 6 22 18 32 6 7 15 7 14 .84 0 66.20 +1802242517213027231710 3 313126 15 12 9 6 4 2 2 5 7 .31 0 66.80 +180225251722 7 0 7 0 0131313 53 3 0 3 0 0 5 5 5 3 .00 0 65.90 +180226251723201317131010 330116 7 5 6 5 4 4 2 15 6 .31 12 68.40 +18022725172440502023432310 7216 27 48 7 9 32 9 4 3 17 .94 12 66.60 +1802282517252020101717201713134 7 7 4 6 6 7 6 5 6 .00 8 66.97 +180301251726 313101010 72323 99 2 5 4 4 4 3 9 9 5 .21 0 66.00 +18030225172720 3 3 3 3 3 710 52 7 2 2 2 2 2 3 4 3 .10 0 66.60 +1803032518 110 0131713101323 99 4 0 5 6 5 4 5 9 5 .21 0 66.70 +1803042518 2232313 71013 7 7103 9 9 5 3 4 5 3 3 5 .21 0 66.40 +1803052518 313 31013 7131013 82 5 2 4 5 3 5 4 5 4 .10 0 66.50 +1803062518 413 7 7 71017 3 7 71 5 3 3 3 4 6 2 3 4 .10 0 66.50 +1803072518 5 3 010 0 0 32310 49 2 0 4 0 0 2 9 4 3 .00 0 66.80 +1803082518 6 71317 7 3 0 7 3 57 3 5 6 3 2 0 3 2 3 .10 0 65.60 +1803092518 72727 710 7102340151 12 12 3 4 3 4 9 27 9 .52 0 66.60 +1803102518 83733231317132017173 22 18 9 5 6 5 7 6 10 .52 0 66.80 +1803112518 9231713 3 3 310 7 79 9 6 5 2 2 2 4 3 4 .10 0 66.90 +180312251810 7 0 0 3 710 3 0 30 3 0 0 2 3 4 2 0 2 .00 0 67.30 +180313251811 0 310 710 7 7 7 51 0 2 4 3 4 3 3 3 3 .00 0 67.70 +180314251812 7 310 713332737137 3 2 4 3 5 18 12 22 9 .52 0 66.90 +1803152518134023172317273033210 27 9 6 9 6 12 15 18 13 .73 0 68.30 +1803162518143343272327372733250 18 32 12 9 12 22 12 18 17 .94 0 67.90 +1803172518154027231317132033186 27 12 9 5 6 5 7 18 11 .63 0 69.00 +1803182518162723101330374357240 12 9 4 5 15 22 32 67 211.15 5 68.50 +180319251817433330 717172033200 32 18 15 3 6 6 7 18 13 .84 0 69.70 +1803202518182327 3 310 71713103 9 12 2 2 4 3 6 5 5 .21 0 68.20 +1803212518191017 3 0 3 31713 66 4 6 2 0 2 2 6 5 3 .10 0 68.80 +1803222518201020 0 3 7132330106 4 7 0 2 3 5 9 15 6 .31 0 68.00 +1803232518213730132717133340210 22 15 5 12 6 5 18 27 14 .84 0 67.70 +1803242518222017132017172030154 7 6 5 7 6 6 7 15 7 .42 0 67.20 +1803252518233037273323232340236 15 22 12 18 9 9 9 27 15 .94 0 68.00 +1803262518243027232010232723183 15 12 9 7 4 9 12 9 10 .52 0 67.50 +180327251825272723172010 3 7134 12 12 9 6 7 4 2 3 7 .31 0 68.00 +180328251826 7 7 7 0 3 0 3 3 30 3 3 3 0 2 0 2 2 2 .00 0 68.30 +180329251827 3 0 717 713 710 64 2 0 3 6 3 5 3 4 3 .10 0 68.80 +1803302519 11320 71013 7 7 7 84 5 7 3 4 5 3 3 3 4 .10 8 68.60 +1803312519 22717101313131010113 12 6 4 5 5 5 4 4 5 .00 8 68.57 +1804012519 31310101710101010 90 5 4 4 6 4 4 4 4 4 .21 5 68.90 +1804022519 417 7 3 713101010 77 6 3 2 3 5 4 4 4 4 .10 0 68.40 +1804032519 51320 7 0 0 0 0 3 43 5 7 3 0 0 0 0 2 2 .00 0 67.80 +1804042519 6 3 0 31313131320 78 2 0 2 5 5 5 5 7 4 .10 0 68.60 +1804052519 7272310 313233017146 12 9 4 2 5 9 15 6 8 .42 0 66.40 +1804062519 8 7 3 3 7 313 7 7 50 3 2 2 3 2 5 3 3 3 .10 0 67.40 +1804072519 9 310 7 3 710 317 60 2 4 3 2 3 4 2 6 3 .10 0 67.00 +1804082519101013 3 7 0131720 83 4 5 2 3 0 5 6 7 4 .10 0 68.10 +1804092519111713201717202740171 6 5 7 6 6 7 12 27 10 .52 0 68.90 +1804102519122040372733272333240 7 27 22 12 18 12 9 18 16 .94 5 68.80 +1804112519134033301713 71020170 27 18 15 6 5 3 4 7 11 .63 0 68.60 +1804122519141717231317132327150 6 6 9 5 6 5 9 12 7 .42 5 70.40 +1804132519154023201310 72023156 27 9 7 5 4 3 7 9 9 .52 10 70.10 +1804142519162010 0 717171317101 7 4 0 3 6 6 5 6 5 .21 0 69.90 +180415251917201313 713 7 717 97 7 5 5 3 5 3 3 6 5 .21 5 71.00 +18041625191810 7 0 3 3 3 010 36 4 3 0 2 2 2 0 4 2 .00 5 69.70 +18041725191910 7 7 0 3 3 313 46 4 3 3 0 2 2 2 5 3 .00 7 69.80 +1804182519201313 710171313 7 93 5 5 3 4 6 5 5 3 4 .21 0 71.40 +180419251921 3 3 010 3 0 3 3 25 2 2 0 4 2 0 2 2 2 .00 5 71.40 +1804202519223740575743475333367 22 27 67 67 32 39 56 18 411.57 11 73.70 +1804212519233023272023302313189 15 9 12 7 9 15 9 5 10 .63 17 77.50 +180422251924101310 317 71017 87 4 5 4 2 6 3 4 6 4 .10 14 76.50 +1804232519252717 3 0 7 72720108 12 6 2 0 3 3 12 7 6 .31 15 74.70 +180424251926 7 010 313131717 80 3 0 4 2 5 5 6 6 4 .10 14 73.70 +1804252519272017 7 7 3 3 013 70 7 6 3 3 2 2 0 5 4 .10 12 71.60 +1804262520 113 7 313 7 3 317 66 5 3 2 5 3 2 2 6 4 .10 9 70.30 +1804272520 213 0 0 713271720 97 5 0 0 3 5 12 6 7 5 .21 9 69.60 +1804282520 317 7 3 310 7 3 3 53 6 3 2 2 4 3 2 2 3 .10 0 71.10 +1804292520 4 3 010 71013 313 59 2 0 4 3 4 5 2 5 3 .10 0 72.20 +1804302520 52317 7 31713 713100 9 6 3 2 6 5 3 5 4 .00 0 70.97 +1805012520 6 3 3 7 3 3 3 7 7 36 2 2 3 2 2 2 3 3 2 .00 0 69.50 +1805022520 710171310 7 7 3 0 67 4 6 5 4 3 3 2 0 3 .10 0 68.10 +1805032520 8 7 3 3 3 7 7 717 54 3 2 2 2 3 3 3 6 3 .10 0 67.60 +1805042520 9 3 713 7 7 71010 64 2 3 5 3 3 3 4 4 3 .10 8 68.90 +180505252010 710 32737474057228 3 4 2 12 22 39 27 67 221.15 10 68.70 +1805062520115337272730274043284 56 22 12 12 15 12 27 32 241.15 10 68.40 +1805072520124037271727302330231 27 22 12 6 12 15 9 15 15 .84 11 70.90 +1805082520132330232723333723219 9 15 9 12 9 18 22 9 13 .73 14 70.90 +1805092520143323231723234037219 18 9 9 6 9 9 27 22 14 .84 14 70.90 +180510252015332027202027 723177 18 7 12 7 7 12 3 9 9 .52 8 71.00 +1805112520161733331723173333206 6 18 18 6 9 6 18 18 12 .73 7 71.70 +18051225201727331313 7 71720137 12 18 5 5 3 3 6 7 7 .42 9 71.20 +180513252018 717201723201723144 3 6 7 6 9 7 6 9 7 .31 7 72.40 +180514252019 71010 7 7131020 84 3 4 4 3 3 5 4 7 4 .10 0 71.80 +180515252020 7 710 3 7131013 70 3 3 4 2 3 5 4 5 4 .10 0 71.90 +180516252021 3 3 3 310 71313 55 2 2 2 2 4 3 5 5 3 .10 0 71.50 +1805172520222717172327232020174 12 6 6 9 12 9 7 7 8 .52 0 70.50 +1805182520231313 3101310 710 79 5 5 2 4 5 4 3 4 4 .10 0 71.10 +180519252024 0 0 0 3 7 710 7 34 0 0 0 2 3 3 4 3 2 .00 0 71.90 +180520252025 710 7 3 7 3 0 3 40 3 4 3 2 3 2 0 2 2 .00 0 70.40 +180521252026 3 7 0 7 0 3 010 30 2 3 0 3 0 2 0 4 2 .00 7 71.30 +180522252027 3 7171017131717101 2 3 6 4 6 5 6 6 5 .21 9 72.60 +1805232521 1132027272313 313139 5 7 12 12 9 5 2 5 7 .42 18 75.00 +1805242521 21313 3 3 7 7 3 7 56 5 5 2 2 3 3 2 3 3 .10 24 75.60 +1805252521 310 7 3 31010 7 0 50 4 3 2 2 4 4 3 0 3 .00 23 77.70 +1805262521 4 3 7 0 3 7 31013 46 2 3 0 2 3 2 4 5 3 .00 19 74.90 +1805272521 51010 310 3 3 3 7 49 4 4 2 4 2 2 2 3 3 .10 19 76.60 +1805282521 6 71010 71310 7 7 71 3 4 4 3 5 4 3 3 4 .10 14 78.90 +1805292521 7 713 7 7 7 310 7 61 3 5 3 3 3 2 4 3 3 .10 17 77.00 +1805302521 8 3 3 7 3 3 71317 56 2 2 3 2 2 3 5 6 3 .10 15 77.30 +1805312521 91310 31013101317 89 5 4 2 4 5 4 5 6 4 .00 15 77.73 +1806012521103337434347332323282 18 22 32 32 39 18 9 9 221.15 16 76.90 +1806022521112337271723203737221 9 22 12 6 9 7 22 22 14 .84 16 76.50 +1806032521122717101727231720158 12 6 4 6 12 9 6 7 8 .42 9 75.70 +180604252113 7131013 31013 7 76 3 5 4 5 2 4 5 3 4 .10 0 72.60 +18060525211417171013171317 7111 6 6 4 5 6 5 6 3 5 .21 0 73.40 +180606252115 710 3 310202720100 3 4 2 2 4 7 12 7 5 .21 5 73.20 +18060725211627131010 3 71013 93 12 5 4 4 2 3 4 5 5 .21 0 71.30 +1806082521171017 31710 3 0 3 63 4 6 2 6 4 2 0 2 3 .10 0 70.20 +180609252118 7 3 710 3 713 7 57 3 2 3 4 2 3 5 3 3 .10 0 68.80 +180610252119 310 0 0 3 7 7 3 33 2 4 0 0 2 3 3 2 2 .00 0 72.40 +18061125212010 3 3 3 710 313 52 4 2 2 2 3 4 2 5 3 .10 0 72.00 +1806122521211313 3 0 3 3 310 48 5 5 2 0 2 2 2 4 3 .00 8 72.50 +180613252122 0 7 7 3 3 31320 56 0 3 3 2 2 2 5 7 3 .10 11 73.00 +18061425212317101310 7 7 710 81 6 4 5 4 3 3 3 4 4 .10 11 74.70 +180615252124 7 7 7 7 31010 7 58 3 3 3 3 2 4 4 3 3 .10 10 72.80 +180616252125 3 7 3 0 3 3 310 32 2 3 2 0 2 2 2 4 2 .00 10 72.70 +180617252126 710 7 3 3101717 74 3 4 3 2 2 4 6 6 4 .10 9 74.60 +1806182521274330333330231723232 32 15 18 18 15 9 6 9 15 .94 20 76.10 +1806192522 11317231710 7 713107 5 6 9 6 4 3 3 5 5 .21 24 79.00 +1806202522 2 7172017 7 7 710 92 3 6 7 6 3 3 3 4 4 .21 39 84.70 +1806212522 3 7 7 7 7 0 3 3 3 37 3 3 3 3 0 2 2 2 2 .00 36 84.20 +1806222522 4 31010 3 3 713 7 56 2 4 4 2 2 3 5 3 3 .10 30 83.00 +1806232522 52327173737302737235 9 12 6 22 22 15 12 22 15 .84 27 79.70 +1806242522 62317201717 71313127 9 6 7 6 6 3 5 5 6 .31 17 77.00 +1806252522 710 7 71720172750155 4 3 3 6 7 6 12 48 11 .63 12 75.20 +1806262522 84733273337303020257 39 18 12 18 22 15 15 7 181.05 11 73.40 +1806272522 91023131317101027123 4 9 5 5 6 4 4 12 6 .31 6 72.40 +18062825221017 7 710171313 7 91 6 3 3 4 6 5 5 3 4 .21 0 71.90 +180629252211 713 7 7 7 7 3 0 51 3 5 3 3 3 3 2 0 3 .00 0 70.90 +180630252212 3 31010 710 7 7 57 2 2 4 4 3 4 3 3 3 .00 0 71.73 +180701252213 3 3 3 3 0 0 3 3 18 2 2 2 2 0 0 2 2 2 .00 0 70.40 +180702252214 3 3 3 3 7 7 3 0 29 2 2 2 2 3 3 2 0 2 .00 0 68.80 +180703252215 0 3 0 31317 710 53 0 2 0 2 5 6 3 4 3 .00 0 70.50 +180704252216 7 710 7101010 7 68 3 3 4 3 4 4 4 3 4 .10 0 70.20 +1807052522172010 32033434740216 7 4 2 7 18 32 39 27 17 .94 0 70.40 +1807062522183317 72010 7 720121 18 6 3 7 4 3 3 7 6 .31 0 72.90 +1807072522191713 7 7 7131710 91 6 5 3 3 3 5 6 4 4 .21 0 74.40 +18070825222010 710 710 3 710 64 4 3 4 3 4 2 3 4 3 .10 0 74.00 +180709252221 3 7 7 3 7 7 3 7 44 2 3 3 2 3 3 2 3 3 .00 0 75.40 +18071025222213231713201710 7120 5 9 6 5 7 6 4 3 6 .31 0 74.50 +180711252223 717202327172317151 3 6 7 9 12 6 9 6 7 .42 0 75.80 +1807122522241320201317131313122 5 7 7 5 6 5 5 5 6 .31 0 74.60 +180713252225231713 7 710 7 3 87 9 6 5 3 3 4 3 2 4 .21 0 74.90 +1807142522261310101010 3 7 0 63 5 4 4 4 4 2 3 0 3 .10 0 74.70 +18071525222710 7 3 3 3 7 7 3 43 4 3 2 2 2 3 3 2 3 .00 0 74.10 +1807162523 1 7172717 7202330148 3 6 12 6 3 7 9 15 8 .42 0 74.30 +1807172523 210303010 710 310110 4 15 15 4 3 4 2 4 6 .31 0 73.50 +1807182523 3 7 7 7 3 7 31010 54 3 3 3 2 3 2 4 4 3 .10 0 73.60 +1807192523 4 7 3 7 7 3 713 7 54 3 2 3 3 2 3 5 3 3 .10 0 72.80 +1807202523 517 7102017101720118 6 3 4 7 6 4 6 7 5 .21 0 72.70 +1807212523 61717302733231317177 6 6 15 12 18 9 5 6 10 .52 0 72.20 +1807222523 7171013131013 7 7 90 6 4 5 5 4 5 3 3 4 .21 0 70.40 +1807232523 8 3 7 7 7 3 31010 50 2 3 3 3 2 2 4 4 3 .10 0 69.10 +1807242523 93730332717272333227 22 15 18 12 6 12 9 18 14 .84 0 69.00 +1807252523103033171310101017140 15 18 6 5 4 4 4 6 8 .42 0 67.90 +180726252311 710 3 710 7 7 7 58 3 4 2 3 4 3 3 3 3 .10 0 68.30 +180727252312 7 7 3 3 3 3 713 46 3 3 2 2 2 2 3 5 3 .00 0 68.60 +1807282523131313 71710 310 7 80 5 5 3 6 4 2 4 3 4 .10 0 70.00 +18072925231413 710 7 7 71310 74 5 3 4 3 3 3 5 4 4 .10 0 70.00 +180730252315 7 3 0 317101717 74 3 2 0 2 6 4 6 6 4 .10 0 69.70 +18073125231617 7101017101717105 6 3 4 4 6 4 6 6 4 .00 0 69.90 +18080125231720 7 31013171720107 7 3 2 4 5 6 6 7 5 .21 8 72.30 +1808022523182717171013 3 0 3 90 12 6 6 4 5 2 0 2 5 .21 8 72.00 +180803252319 71010232013 3 7 93 3 4 4 9 7 5 2 3 5 .21 0 72.30 +1808042523202020 710 3 3 310 76 7 7 3 4 2 2 2 4 4 .10 0 72.50 +180805252321 710 7201010 0 7 71 3 4 3 7 4 4 0 3 4 .10 0 71.20 +180806252322 0 7 71010 310 3 50 0 3 3 4 4 2 4 2 3 .00 0 71.10 +1808072523232017101730202720161 7 6 4 6 15 7 12 7 8 .42 0 71.50 +180808252324 7 7131313101010 83 3 3 5 5 5 4 4 4 4 .10 0 71.60 +18080925232510 71310 7 3 710 67 4 3 5 4 3 2 3 4 4 .10 0 72.20 +18081025232610 7 3 3 7101010 60 4 3 2 2 3 4 4 4 3 .10 0 71.40 +1808112523271317171730232040177 5 6 6 6 15 9 7 27 10 .63 0 69.30 +1808122524 113 7 71713 71717 98 5 3 3 6 5 3 6 6 5 .21 0 69.90 +1808132524 2 3 7 71010 3 313 56 2 3 3 4 4 2 2 5 3 .10 0 69.60 +1808142524 313 3 310 3 7 010 49 5 2 2 4 2 3 0 4 3 .00 8 70.50 +1808152524 41710172740303333207 6 4 6 12 27 15 18 18 13 .84 9 70.60 +1808162524 53323172323131323168 18 9 6 9 9 5 5 9 9 .52 9 70.00 +1808172524 62737201710 32730171 12 22 7 6 4 2 12 15 10 .63 8 69.00 +1808182524 71727332723201017174 6 12 18 12 9 7 4 6 9 .52 7 68.90 +1808192524 817131013 7272023130 6 5 4 5 3 12 7 9 6 .31 12 68.40 +1808202524 93333132023273723209 18 18 5 7 9 12 22 9 12 .73 11 69.60 +18082125241023102017 710 720114 9 4 7 6 3 4 3 7 5 .21 11 69.40 +180822252411172013 310 7 320 93 6 7 5 2 4 3 2 7 4 .21 0 68.40 +18082325241220 7 7 310 710 7 71 7 3 3 2 4 3 4 3 4 .10 11 71.10 +180824252413 0 7101023 7 7 7 71 0 3 4 4 9 3 3 3 4 .10 20 74.00 +180825252414 710202323133043169 3 4 7 9 9 5 15 32 10 .63 23 73.10 +1808262524155367735043605023419 56111154 48 32 80 48 9 671.77 21 72.60 +1808272524161323273330534730256 5 9 12 18 15 56 39 15 211.15 9 71.00 +1808282524173323172320 7 3 7133 18 9 6 9 7 3 2 3 7 .42 7 71.20 +1808292524182313 7 7 7171313100 9 5 3 3 3 6 5 5 5 .21 0 71.80 +18083025241913 7 7 0 3 31020 63 5 3 3 0 2 2 4 7 3 .10 0 69.60 +18083125242013 7 7 710 71017 78 5 3 3 3 4 3 4 6 3 .00 0 70.87 +18090125242110 7 3 313 71713 73 4 3 2 2 5 3 6 5 4 .10 0 69.50 +180902252422131710 3 3101320 89 5 6 4 2 2 4 5 7 4 .21 0 68.90 +1809032524231013 3 3 7 7 717 67 4 5 2 2 3 3 3 6 4 .10 0 69.30 +180904252424172723 7 7132030144 6 12 9 3 3 5 7 15 8 .42 0 68.60 +1809052524253327132727171310167 18 12 5 12 12 6 5 4 9 .52 0 68.60 +180906252426201313 3 7 71017 90 7 5 5 2 3 3 4 6 4 .21 0 68.40 +1809072524272017 7 71010 310 84 7 6 3 3 4 4 2 4 4 .10 0 68.60 +1809082525 1 7 023 7 310 720 77 3 0 9 3 2 4 3 7 4 .10 11 69.70 +1809092525 2201010 313131723109 7 4 4 2 5 5 6 9 5 .21 10 69.40 +1809102525 3 3 3 72327504347203 2 2 3 9 12 48 32 39 181.05 7 69.90 +1809112525 43347535330273323299 18 39 56 56 15 12 18 9 281.26 10 70.30 +1809122525 52017101313202037150 7 6 4 5 5 7 7 22 8 .42 9 70.60 +1809132525 63737303330302027244 22 22 15 18 15 15 7 12 16 .94 0 70.50 +1809142525 74340202020202723213 32 27 7 7 7 7 12 9 14 .84 0 69.80 +1809152525 8231720172010 723137 9 6 7 6 7 4 3 9 6 .31 0 69.20 +1809162525 913201013 7 01020 93 5 7 4 5 3 0 4 7 4 .21 0 69.80 +1809172525103023171717232327177 15 9 6 6 6 9 9 12 9 .52 9 68.50 +18091825251123171720 7 7 713111 9 6 6 7 3 3 3 5 5 .21 0 68.80 +180919252512102313 7 3 7 0 3 66 4 9 5 3 2 3 0 2 4 .10 0 68.50 +180920252513 3 0 3 3 3 0 0 0 12 2 0 2 2 2 0 0 0 1 .00 0 67.20 +180921252514 3 7 3 7 7101740 94 2 3 2 3 3 4 6 27 6 .31 0 67.40 +1809222525154337303740273733284 32 22 15 22 27 12 22 18 211.15 0 68.40 +1809232525163323172323202023182 18 9 6 9 9 7 7 9 9 .52 0 68.90 +1809242525172323131710 71717127 9 9 5 6 4 3 6 6 6 .31 0 69.00 +1809252525182323102327202327176 9 9 4 9 12 7 9 12 9 .52 0 68.00 +180926252519101320 713201027120 4 5 7 3 5 7 4 12 6 .31 0 69.30 +1809272525201320132017 3 323112 5 7 5 7 6 2 2 9 5 .21 0 67.40 +180928252521302727 7 3 3 317117 15 12 12 3 2 2 2 6 7 .31 0 69.40 +1809292525222027232723171330180 7 12 9 12 9 6 5 15 9 .52 0 68.90 +1809302525231727 3 710171323117 6 12 2 3 4 6 5 9 5 .00 11 68.57 +181001252524 013 71337232023136 0 5 3 5 22 9 7 9 8 .42 12 70.30 +181002252525372720 713 317 3127 22 12 7 3 5 2 6 2 7 .42 10 67.10 +181003252526 7 7 717 7101723 95 3 3 3 6 3 4 6 9 5 .21 9 68.40 +18100425252710 3 3 3 7131310 62 4 2 2 2 3 5 5 4 3 .10 7 67.80 +1810052526 13023172020 71023150 15 9 6 7 7 3 4 9 8 .42 0 68.70 +1810062526 227101013 3 3 0 3 69 12 4 4 5 2 2 0 2 4 .10 0 68.60 +1810072526 3 7 7102337504740221 3 3 4 9 22 48 39 27 191.05 0 69.40 +1810082526 44040332043331713239 27 27 18 7 32 18 6 5 181.05 0 68.70 +1810092526 53023303327332330229 15 9 15 18 12 18 9 15 14 .84 0 69.30 +1810102526 630 7172033274723204 15 3 6 7 18 12 39 9 14 .84 0 69.60 +1810112526 73027171320201713157 15 12 6 5 7 7 6 5 8 .42 5 70.60 +1810122526 813171010 3101313 89 5 6 4 4 2 4 5 5 4 .21 9 71.30 +1810132526 9102313 313403737176 4 9 5 2 5 27 22 22 12 .73 18 72.10 +1810142526101713101710131317110 6 5 4 6 4 5 5 6 5 .21 16 71.10 +1810152526113017171720232323170 15 6 6 6 7 9 9 9 8 .52 9 69.60 +18101625261220 3 7171317 3 7 87 7 2 3 6 5 6 2 3 4 .10 0 69.30 +181017252613 31017 3 0 3 0 3 39 2 4 6 2 0 2 0 2 2 .00 7 69.60 +181018252614 3 0 3 0 0 0 0 3 9 2 0 2 0 0 0 0 2 1 .00 0 69.00 +181019252615 3 0 3 3 3 0 3 7 22 2 0 2 2 2 0 2 3 2 .00 0 69.00 +181020252616 3 0 0 0 3 0 3 3 12 2 0 0 0 2 0 2 2 1 .00 0 69.80 +181021252617 3 0 02020131010 76 2 0 0 7 7 5 4 4 4 .10 0 70.40 +181022252618271717 710 7 710102 12 6 6 3 4 3 3 4 5 .21 0 70.20 +1810232526191710 3 7 3 3 0 3 46 6 4 2 3 2 2 0 2 3 .00 0 70.90 181024252620 7 31013 3 01010 56 3 2 4 5 2 0 4 4 3 .10 0 68.90 181025252621 720 71713171717115 3 7 3 6 5 6 6 6 50.21 0 68.60 1810262526222313 71310 72027120 9 5 3 5 4 3 7 12 60.31 0 68.30 @@ -306,60 +306,60 @@ 1811022527 220 3 313 3 7 3 3 55 7 2 2 5 2 3 2 2 30.10 0 66.50 1811032527 32020 3 3 3 0 310 62 7 7 2 2 2 0 2 4 30.10 0 66.30 1811042527 410 7 7 7 7274750162 4 3 3 3 3 12 39 48 140.84 0 65.50 -1811052527 54353434330303723302 32 56 32 32 15 15 22 9 271.26 0 67.20 -1811062527 61730131710 7 720121 6 15 5 6 4 3 3 7 60.31 0 67.60 +1811052527 54353434330303723302 32 56 32 32 15 15 22 9 271.26 0 67.20 +1811062527 61730131710 7 720121 6 15 5 6 4 3 3 7 60.31 0 67.60 1811072527 72327271010102023 45 9 12 12 4 4 4 7 9 80.42 0 67.50 -1811082527 830371733 7101017161 15 22 6 18 3 4 4 6 100.52 0 68.20 +1811082527 830371733 7101017161 15 22 6 18 3 4 4 6 100.52 0 68.20 1811092527 913 3101710273337150 5 2 4 6 4 12 18 22 90.52 7 67.60 1811102527102013204020173033193 7 5 7 27 7 6 15 18 120.73 0 67.60 18111125271123201710 7 72717128 9 7 6 4 3 3 12 6 60.31 0 68.00 1811122527122030271717 72023161 7 15 12 6 6 3 7 9 80.42 10 66.80 181113252713201010 7 3 0 3 3 56 7 4 4 3 2 0 2 2 30.10 7 65.60 -181114252714 310 3 7 71013 7 60 2 4 2 3 3 4 5 3 30.10 8 66.50 -181115252715 0 3 0 3 0 7 0 7 20 0 2 0 2 0 3 0 3 10.00 9 66.90 -181116252716 3 0 3 0 710 0 0 23 2 0 2 0 3 4 0 0 10.00 10 69.50 -181117252717 3 3 3 0 0 0 0 0 9 2 2 2 0 0 0 0 0 10.00 11 71.70 -181118252718 7 7 0 310 7 310 47 3 3 0 2 4 3 2 4 30.00 10 70.60 -1811192527191313 7 3 0131017 76 5 5 3 2 0 5 4 6 40.10 9 69.50 -18112025272027301310 3 7 7 7104 12 15 5 4 2 3 3 3 60.31 0 68.80 -18112125272113271010 3 0 310 76 5 12 4 4 2 0 2 4 40.10 0 67.10 -18112225272210 3 7 7 3 7 3 0 40 4 2 3 3 2 3 2 0 20.00 0 67.50 -1811232527231010 3 7 3 0 3 3 39 4 4 2 3 2 0 2 2 20.00 0 67.50 -181124252724 0 0 3 3 717 713 50 0 0 2 2 3 6 3 5 30.00 5 68.20 -181125252725 7 7 31010 7 3 7 54 3 3 2 4 4 3 2 3 30.10 9 67.80 -1811262527261010 0 0 0 0 0 3 23 4 4 0 0 0 0 0 2 10.00 0 66.80 -18112725272710 7 0 717202020101 4 3 0 3 6 7 7 7 50.21 0 66.60 -1811282528 113 0 0 0 0 7 310 33 5 0 0 0 0 3 2 4 20.00 0 65.70 -1811292528 220 3 3 0 0 0 013 39 7 2 2 0 0 0 0 5 20.00 0 66.00 -1811302528 313 3 0 3 3 3 310 38 5 2 2 2 2 2 2 4 20.00 0 66.10 -1812012528 4 31310 720273020130 2 5 4 3 7 12 15 7 70.31 0 67.40 -1812022528 51720202023333033196 6 7 7 7 9 18 15 18 110.63 0 67.00 -1812032528 62313131720303020166 9 5 5 6 7 15 15 7 90.52 0 66.40 -1812042528 730231713 7171320140 15 9 6 5 3 6 5 7 70.42 0 66.80 -1812052528 82017 3 313 7 720 90 7 6 2 2 5 3 3 7 40.21 12 68.80 -1812062528 91720101017101310107 6 7 4 4 6 4 5 4 50.21 14 67.70 -1812072528101023272020203327180 4 9 12 7 7 7 18 12 100.52 12 68.10 -1812082528112027271717302317178 7 12 12 6 6 15 9 6 90.52 0 68.40 -1812092528122013101013233040159 7 5 4 4 5 9 15 27 100.52 0 69.50 -1812102528132330302720171317177 9 15 15 12 7 6 5 6 90.52 0 68.80 -181211252814 7202723 3202713140 3 7 12 9 2 7 12 5 70.42 8 68.90 -18121225281517 7 7 7 3 717 7 72 6 3 3 3 2 3 6 3 40.10 0 68.60 -181213252816 010 3 0 3 3 3 3 25 0 4 2 0 2 2 2 2 20.00 0 68.00 -181214252817 3 7 0 3 0 7 0 3 23 2 3 0 2 0 3 0 2 20.00 7 68.60 -181215252818 3 0 0 0 3 0 3 3 12 2 0 0 0 2 0 2 2 10.00 5 68.90 -181216252819 3 0 7 0 3 3 7 3 26 2 0 3 0 2 2 3 2 20.00 0 67.60 -181217252820 310171010132320106 2 4 6 4 4 5 9 7 50.21 0 67.90 -18121825282127171010172023 7131 12 6 4 4 6 7 9 3 60.31 0 68.10 -18121925282210131323 7131020109 4 5 5 9 3 5 4 7 50.21 0 68.00 -1812202528233030302010132327183 15 15 15 7 4 5 9 12 100.63 0 67.60 -18122125282420101013 7 01313 86 7 4 4 5 3 0 5 5 40.10 0 68.80 -181222252825 710 0 3 3 0 3 3 29 3 4 0 2 2 0 2 2 20.00 0 68.70 -18122325282610 0 0 3 3 3 7 3 29 4 0 0 2 2 2 3 2 20.00 0 68.00 -181224252827 7 0 0 7 7 0 713 41 3 0 0 3 3 0 3 5 20.00 0 67.20 -1812252529 11017 0 010 713 7 64 4 6 0 0 4 3 5 3 30.10 0 67.30 -1812262529 2 3 3 3 713 7 3 0 39 2 2 2 3 5 3 2 0 20.00 0 66.50 -1812272529 31313 7101310 7 7 80 5 5 3 4 5 4 3 3 40.00 0 67.00 -1812282529 44040433037303330283 27 27 32 15 22 15 18 15 211.15 0 67.00 -1812292529 52730272023171720181 12 15 12 7 9 6 6 7 90.52 0 66.70 -1812302529 61730272320302013180 6 15 12 9 7 15 7 5 100.52 0 67.10 -1812312529 73020171720272317171 15 7 6 6 7 12 9 6 80.00 0 66.93 +181114252714 310 3 7 71013 7 60 2 4 2 3 3 4 5 3 30.10 8 66.50 +181115252715 0 3 0 3 0 7 0 7 20 0 2 0 2 0 3 0 3 10.00 9 66.90 +181116252716 3 0 3 0 710 0 0 23 2 0 2 0 3 4 0 0 10.00 10 69.50 +181117252717 3 3 3 0 0 0 0 0 9 2 2 2 0 0 0 0 0 10.00 11 71.70 +181118252718 7 7 0 310 7 310 47 3 3 0 2 4 3 2 4 30.00 10 70.60 +1811192527191313 7 3 0131017 76 5 5 3 2 0 5 4 6 40.10 9 69.50 +18112025272027301310 3 7 7 7104 12 15 5 4 2 3 3 3 60.31 0 68.80 +18112125272113271010 3 0 310 76 5 12 4 4 2 0 2 4 40.10 0 67.10 +18112225272210 3 7 7 3 7 3 0 40 4 2 3 3 2 3 2 0 20.00 0 67.50 +1811232527231010 3 7 3 0 3 3 39 4 4 2 3 2 0 2 2 20.00 0 67.50 +181124252724 0 0 3 3 717 713 50 0 0 2 2 3 6 3 5 30.00 5 68.20 +181125252725 7 7 31010 7 3 7 54 3 3 2 4 4 3 2 3 30.10 9 67.80 +1811262527261010 0 0 0 0 0 3 23 4 4 0 0 0 0 0 2 10.00 0 66.80 +18112725272710 7 0 717202020101 4 3 0 3 6 7 7 7 50.21 0 66.60 +1811282528 113 0 0 0 0 7 310 33 5 0 0 0 0 3 2 4 20.00 0 65.70 +1811292528 220 3 3 0 0 0 013 39 7 2 2 0 0 0 0 5 20.00 0 66.00 +1811302528 313 3 0 3 3 3 310 38 5 2 2 2 2 2 2 4 20.00 0 66.10 +1812012528 4 31310 720273020130 2 5 4 3 7 12 15 7 70.31 0 67.40 +1812022528 51720202023333033196 6 7 7 7 9 18 15 18 110.63 0 67.00 +1812032528 62313131720303020166 9 5 5 6 7 15 15 7 90.52 0 66.40 +1812042528 730231713 7171320140 15 9 6 5 3 6 5 7 70.42 0 66.80 +1812052528 82017 3 313 7 720 90 7 6 2 2 5 3 3 7 40.21 12 68.80 +1812062528 91720101017101310107 6 7 4 4 6 4 5 4 50.21 14 67.70 +1812072528101023272020203327180 4 9 12 7 7 7 18 12 100.52 12 68.10 +1812082528112027271717302317178 7 12 12 6 6 15 9 6 90.52 0 68.40 +1812092528122013101013233040159 7 5 4 4 5 9 15 27 100.52 0 69.50 +1812102528132330302720171317177 9 15 15 12 7 6 5 6 90.52 0 68.80 +181211252814 7202723 3202713140 3 7 12 9 2 7 12 5 70.42 8 68.90 +18121225281517 7 7 7 3 717 7 72 6 3 3 3 2 3 6 3 40.10 0 68.60 +181213252816 010 3 0 3 3 3 3 25 0 4 2 0 2 2 2 2 20.00 0 68.00 +181214252817 3 7 0 3 0 7 0 3 23 2 3 0 2 0 3 0 2 20.00 7 68.60 +181215252818 3 0 0 0 3 0 3 3 12 2 0 0 0 2 0 2 2 10.00 5 68.90 +181216252819 3 0 7 0 3 3 7 3 26 2 0 3 0 2 2 3 2 20.00 0 67.60 +181217252820 310171010132320106 2 4 6 4 4 5 9 7 50.21 0 67.90 +18121825282127171010172023 7131 12 6 4 4 6 7 9 3 60.31 0 68.10 +18121925282210131323 7131020109 4 5 5 9 3 5 4 7 50.21 0 68.00 +1812202528233030302010132327183 15 15 15 7 4 5 9 12 100.63 0 67.60 +18122125282420101013 7 01313 86 7 4 4 5 3 0 5 5 40.10 0 68.80 +181222252825 710 0 3 3 0 3 3 29 3 4 0 2 2 0 2 2 20.00 0 68.70 +18122325282610 0 0 3 3 3 7 3 29 4 0 0 2 2 2 3 2 20.00 0 68.00 +181224252827 7 0 0 7 7 0 713 41 3 0 0 3 3 0 3 5 20.00 0 67.20 +1812252529 11017 0 010 713 7 64 4 6 0 0 4 3 5 3 30.10 0 67.30 +1812262529 2 3 3 3 713 7 3 0 39 2 2 2 3 5 3 2 0 20.00 0 66.50 +1812272529 31313 7101310 7 7 80 5 5 3 4 5 4 3 3 40.00 0 67.00 +1812282529 44040433037303330283 27 27 32 15 22 15 18 15 211.15 0 67.00 +1812292529 52730272023171720181 12 15 12 7 9 6 6 7 90.52 0 66.70 +1812302529 61730272320302013180 6 15 12 9 7 15 7 5 100.52 0 67.10 +1812312529 73020171720272317171 15 7 6 6 7 12 9 6 80.00 0 66.93 diff --git a/RMextract/pyiriplas/kp2019 b/RMextract/pyiriplas/kp2019 index dea134c..1c5c32b 100644 --- a/RMextract/pyiriplas/kp2019 +++ b/RMextract/pyiriplas/kp2019 @@ -1,365 +1,365 @@ -1901012529 81013271720 3 0 7 97 4 5 12 6 7 2 0 3 5 .21 9 69.50 -1901022529 9 3 0 0 0 3 3 0 3 12 2 0 0 0 2 2 0 2 1 .00 12 72.70 -19010325291010 0 0 7 3 0 0 3 23 4 0 0 3 2 0 0 2 1 .00 12 70.20 -19010425291113 3101717232733143 5 2 4 6 6 9 12 18 8 .42 10 69.10 -1901052529125040232713232030226 48 27 9 12 5 9 7 15 16 .94 8 68.80 -1901062529132027271720233020184 7 12 12 6 7 9 15 7 9 .52 0 69.60 -1901072529142020172017 7 720128 7 7 6 7 6 3 3 7 6 .31 0 69.10 -1901082529152317132013 713 3109 9 6 5 7 5 3 5 2 5 .21 0 69.00 -19010925291620 71017 3 31013 83 7 3 4 6 2 2 4 5 4 .10 0 69.20 -19011025291710 7131010 3 3 7 63 4 3 5 4 4 2 2 3 3 .10 0 67.80 -1901112529181317331013 7 7 3103 5 6 18 4 5 3 3 2 6 .31 0 65.90 -190112252919 7 3 0 0 7 7 3 3 30 3 2 0 0 3 3 2 2 2 .00 0 67.30 -190113252920 313 7 7 0 0 710 47 2 5 3 3 0 0 3 4 2 .00 0 66.60 -1901142529212017202010171023137 7 6 7 7 4 6 4 9 6 .31 0 67.80 -19011525292227 713 7 7101710 98 12 3 5 3 3 4 6 4 5 .21 0 67.30 -190116252923 31717 3 3101727 97 2 6 6 2 2 4 6 12 5 .21 0 67.50 -1901172529243020 71310231720140 15 7 3 5 4 9 6 7 7 .42 0 66.40 -19011825292517131020171710 7111 6 5 4 7 6 6 4 3 5 .21 0 66.60 -190119252926 310 717 0 71027 81 2 4 3 6 0 3 4 12 4 .10 0 67.40 -190120252927171010 3 710 710 74 6 4 4 2 3 4 3 4 4 .10 0 67.00 -1901212530 110 7 0 3 3101317 63 4 3 0 2 2 4 5 6 3 .10 0 67.70 -1901222530 2 3 7 0 0 3101717 57 2 3 0 0 2 4 6 6 3 .10 12 68.50 -1901232530 32323232327232040202 9 9 9 9 12 9 7 27 11 .73 14 69.30 -1901242530 43333371713274043243 18 18 22 6 5 12 27 32 181.05 16 70.20 -1901252530 52027372733302320217 7 12 22 12 18 15 9 7 13 .73 18 72.70 -1901262530 6171717103023 7 7128 6 6 6 4 15 9 3 3 6 .31 19 74.30 -1901272530 723131710 7 71010 97 9 5 6 4 3 3 4 4 5 .21 15 72.80 -1901282530 810 3 3 3 3 3 3 0 28 4 2 2 2 2 2 2 0 2 .00 12 73.50 -1901292530 917 0 0 3 7 3 0 3 33 6 0 0 2 3 2 0 2 2 .00 9 70.90 -190130253010 3 0 0 0 0 31010 26 2 0 0 0 0 2 4 4 2 .00 0 71.40 -19013125301110 3131027101717107 4 2 5 4 12 4 6 6 5 .00 0 71.93 -1902012530123037332323373037250 15 22 18 9 9 22 15 22 16 .94 0 70.00 -1902022530133740302720373030251 22 27 15 12 7 22 15 15 17 .94 0 68.80 -1902032530143330271013202023176 18 15 12 4 5 7 7 9 10 .52 0 69.10 -190204253015 7 0 7 313173730114 3 0 3 2 5 6 22 15 7 .42 0 68.70 -1902052530163020 7 3 01010 7 87 15 7 3 2 0 4 4 3 5 .21 0 68.70 -1902062530171320202727132723170 5 7 7 12 12 5 12 9 9 .52 0 67.90 -190207253018171310 0 3 71020 80 6 5 4 0 2 3 4 7 4 .10 0 68.30 -19020825301920172010 7102040144 7 6 7 4 3 4 7 27 8 .42 0 68.10 -1902092530202723202317203013173 12 9 7 9 6 7 15 5 9 .52 0 68.40 -19021025302123271013 7 31013106 9 12 4 5 3 2 4 5 6 .21 0 68.10 -1902112530221013171027332027157 4 5 6 4 12 18 7 12 8 .52 0 68.00 -1902122530232023 3 710 7 323 96 7 9 2 3 4 3 2 9 5 .21 0 68.40 -1902132530242027273733301020204 7 12 12 22 18 15 4 7 12 .73 8 68.60 -19021425302527372330 7 72313167 12 22 9 15 3 3 9 5 10 .52 0 69.70 -190215253026231010 3 3 3 7 3 62 9 4 4 2 2 2 3 2 4 .10 0 69.20 -190216253027 0 310 0 7131010 53 0 2 4 0 3 5 4 4 3 .00 0 69.00 -1902172531 1 3 0 7 3 0 31723 56 2 0 3 2 0 2 6 9 3 .10 0 68.40 -1902182531 23030 71310 7 3 7107 15 15 3 5 4 3 2 3 6 .31 0 68.30 -1902192531 3 31010 3 0 3 7 7 43 2 4 4 2 0 2 3 3 2 .00 0 68.60 -1902202531 4 7 0 0 0 3 71317 47 3 0 0 0 2 3 5 6 2 .00 0 69.40 -1902212531 52720372023171330187 12 7 22 7 9 6 5 15 10 .63 0 69.20 -1902222531 620 010 7 7 0 713 64 7 0 4 3 3 0 3 5 3 .10 0 69.70 -1902232531 7 7 0 0 0 0 7 7 0 21 3 0 0 0 0 3 3 0 1 .00 0 69.20 -1902242531 8 0 0 7 310 0 0 3 23 0 0 3 2 4 0 0 2 1 .00 0 69.00 -1902252531 9 0 0 7 3 0 0 0 7 17 0 0 3 2 0 0 0 3 1 .00 0 68.90 -190226253110 7 0 010 310 0 7 37 3 0 0 4 2 4 0 3 2 .00 0 69.20 -19022725311113 0 71327272740154 5 0 3 5 12 12 12 27 10 .52 0 69.40 -1902282531124333233743333340285 32 18 9 22 32 18 18 27 22 .00 0 69.17 -1903012531134343333727373737294 32 32 18 22 12 22 22 22 231.15 0 68.70 -1903022531144033272017301717201 27 18 12 7 6 15 6 6 12 .73 0 68.20 -1903032531152330101013 3 723119 9 15 4 4 5 2 3 9 6 .31 0 68.30 -190304253116132713202010 723133 5 12 5 7 7 4 3 9 6 .31 0 69.70 -1903052531172310 3 710 31017 83 9 4 2 3 4 2 4 6 4 .10 5 70.80 -1903062531181017301320 72017134 4 6 15 5 7 3 7 6 7 .31 12 71.30 -190307253119 7 3 0 320232723106 3 2 0 2 7 9 12 9 6 .21 12 69.90 -19030825312023 71017 0 3 313 76 9 3 4 6 0 2 2 5 4 .10 8 70.70 -190309253121 3 0101023101023 89 2 0 4 4 9 4 4 9 4 .21 7 69.70 -1903102531222320 7 3 7 3 0 3 66 9 7 3 2 3 2 0 2 4 .10 7 70.10 -190311253123 0 01013 7 3 310 46 0 0 4 5 3 2 2 4 2 .00 8 69.50 -1903122531241713302313 71313129 6 5 15 9 5 3 5 5 7 .31 7 69.80 -190313253125102013 3 3 313 7 72 4 7 5 2 2 2 5 3 4 .10 0 70.00 -190314253126 310131023132330125 2 4 5 4 9 5 9 15 7 .31 5 69.30 -190315253127272320 7 7102710131 12 9 7 3 3 4 12 4 7 .31 0 68.90 -1903162532 11017172723232043180 4 6 6 12 9 9 7 32 11 .63 0 68.80 -1903172532 2504040271717 7 7205 48 27 27 12 6 6 3 3 16 .94 0 68.60 -1903182532 3 310 3 3 7 7 7 3 43 2 4 2 2 3 3 3 2 3 .00 9 69.30 -1903192532 41010101720132727134 4 4 4 6 7 5 12 12 7 .31 11 69.10 -1903202532 5 71713101313 713 93 3 6 5 4 5 5 3 5 4 .21 25 76.20 -1903212532 6 710 7 3 3 0 0 3 33 3 4 3 2 2 0 0 2 2 .00 28 79.40 -1903222532 7 3 010 0 0 0 0 3 16 2 0 4 0 0 0 0 2 1 .00 22 81.80 -1903232532 8 3 0 010 3 3 0 3 22 2 0 0 4 2 2 0 2 2 .00 18 78.90 -1903242532 9 3 0 3 0 0 0 020 26 2 0 2 0 0 0 0 7 1 .00 12 75.00 -1903252532102010 7 31013 323 89 7 4 3 2 4 5 2 9 4 .21 0 70.80 -1903262532112023 3 0 7 3 017 73 7 9 2 0 3 2 0 6 4 .10 0 68.70 -1903272532122017272317 717 7135 7 6 12 9 6 3 6 3 6 .31 0 68.60 -190328253213 727271730202030178 3 12 12 6 15 7 7 15 10 .52 0 68.10 -19032925321420202020 7132313136 7 7 7 7 3 5 9 5 6 .31 0 68.60 -1903302532152013 3 7 3 0 0 3 49 7 5 2 3 2 0 0 2 3 .00 0 69.20 -1903312532162737301320171310167 12 22 15 5 7 6 5 4 9 .00 0 68.63 -1904012532172313 7 7 7 7 3 3 70 9 5 3 3 3 3 2 2 3 .00 9 69.08 +1901012529 81013271720 3 0 7 97 4 5 12 6 7 2 0 3 5 .21 9 69.50 +1901022529 9 3 0 0 0 3 3 0 3 12 2 0 0 0 2 2 0 2 1 .00 12 72.70 +19010325291010 0 0 7 3 0 0 3 23 4 0 0 3 2 0 0 2 1 .00 12 70.20 +19010425291113 3101717232733143 5 2 4 6 6 9 12 18 8 .42 10 69.10 +1901052529125040232713232030226 48 27 9 12 5 9 7 15 16 .94 8 68.80 +1901062529132027271720233020184 7 12 12 6 7 9 15 7 9 .52 0 69.60 +1901072529142020172017 7 720128 7 7 6 7 6 3 3 7 6 .31 0 69.10 +1901082529152317132013 713 3109 9 6 5 7 5 3 5 2 5 .21 0 69.00 +19010925291620 71017 3 31013 83 7 3 4 6 2 2 4 5 4 .10 0 69.20 +19011025291710 7131010 3 3 7 63 4 3 5 4 4 2 2 3 3 .10 0 67.80 +1901112529181317331013 7 7 3103 5 6 18 4 5 3 3 2 6 .31 0 65.90 +190112252919 7 3 0 0 7 7 3 3 30 3 2 0 0 3 3 2 2 2 .00 0 67.30 +190113252920 313 7 7 0 0 710 47 2 5 3 3 0 0 3 4 2 .00 0 66.60 +1901142529212017202010171023137 7 6 7 7 4 6 4 9 6 .31 0 67.80 +19011525292227 713 7 7101710 98 12 3 5 3 3 4 6 4 5 .21 0 67.30 +190116252923 31717 3 3101727 97 2 6 6 2 2 4 6 12 5 .21 0 67.50 +1901172529243020 71310231720140 15 7 3 5 4 9 6 7 7 .42 0 66.40 +19011825292517131020171710 7111 6 5 4 7 6 6 4 3 5 .21 0 66.60 +190119252926 310 717 0 71027 81 2 4 3 6 0 3 4 12 4 .10 0 67.40 +190120252927171010 3 710 710 74 6 4 4 2 3 4 3 4 4 .10 0 67.00 +1901212530 110 7 0 3 3101317 63 4 3 0 2 2 4 5 6 3 .10 0 67.70 +1901222530 2 3 7 0 0 3101717 57 2 3 0 0 2 4 6 6 3 .10 12 68.50 +1901232530 32323232327232040202 9 9 9 9 12 9 7 27 11 .73 14 69.30 +1901242530 43333371713274043243 18 18 22 6 5 12 27 32 181.05 16 70.20 +1901252530 52027372733302320217 7 12 22 12 18 15 9 7 13 .73 18 72.70 +1901262530 6171717103023 7 7128 6 6 6 4 15 9 3 3 6 .31 19 74.30 +1901272530 723131710 7 71010 97 9 5 6 4 3 3 4 4 5 .21 15 72.80 +1901282530 810 3 3 3 3 3 3 0 28 4 2 2 2 2 2 2 0 2 .00 12 73.50 +1901292530 917 0 0 3 7 3 0 3 33 6 0 0 2 3 2 0 2 2 .00 9 70.90 +190130253010 3 0 0 0 0 31010 26 2 0 0 0 0 2 4 4 2 .00 0 71.40 +19013125301110 3131027101717107 4 2 5 4 12 4 6 6 5 .00 0 71.93 +1902012530123037332323373037250 15 22 18 9 9 22 15 22 16 .94 0 70.00 +1902022530133740302720373030251 22 27 15 12 7 22 15 15 17 .94 0 68.80 +1902032530143330271013202023176 18 15 12 4 5 7 7 9 10 .52 0 69.10 +190204253015 7 0 7 313173730114 3 0 3 2 5 6 22 15 7 .42 0 68.70 +1902052530163020 7 3 01010 7 87 15 7 3 2 0 4 4 3 5 .21 0 68.70 +1902062530171320202727132723170 5 7 7 12 12 5 12 9 9 .52 0 67.90 +190207253018171310 0 3 71020 80 6 5 4 0 2 3 4 7 4 .10 0 68.30 +19020825301920172010 7102040144 7 6 7 4 3 4 7 27 8 .42 0 68.10 +1902092530202723202317203013173 12 9 7 9 6 7 15 5 9 .52 0 68.40 +19021025302123271013 7 31013106 9 12 4 5 3 2 4 5 6 .21 0 68.10 +1902112530221013171027332027157 4 5 6 4 12 18 7 12 8 .52 0 68.00 +1902122530232023 3 710 7 323 96 7 9 2 3 4 3 2 9 5 .21 0 68.40 +1902132530242027273733301020204 7 12 12 22 18 15 4 7 12 .73 8 68.60 +19021425302527372330 7 72313167 12 22 9 15 3 3 9 5 10 .52 0 69.70 +190215253026231010 3 3 3 7 3 62 9 4 4 2 2 2 3 2 4 .10 0 69.20 +190216253027 0 310 0 7131010 53 0 2 4 0 3 5 4 4 3 .00 0 69.00 +1902172531 1 3 0 7 3 0 31723 56 2 0 3 2 0 2 6 9 3 .10 0 68.40 +1902182531 23030 71310 7 3 7107 15 15 3 5 4 3 2 3 6 .31 0 68.30 +1902192531 3 31010 3 0 3 7 7 43 2 4 4 2 0 2 3 3 2 .00 0 68.60 +1902202531 4 7 0 0 0 3 71317 47 3 0 0 0 2 3 5 6 2 .00 0 69.40 +1902212531 52720372023171330187 12 7 22 7 9 6 5 15 10 .63 0 69.20 +1902222531 620 010 7 7 0 713 64 7 0 4 3 3 0 3 5 3 .10 0 69.70 +1902232531 7 7 0 0 0 0 7 7 0 21 3 0 0 0 0 3 3 0 1 .00 0 69.20 +1902242531 8 0 0 7 310 0 0 3 23 0 0 3 2 4 0 0 2 1 .00 0 69.00 +1902252531 9 0 0 7 3 0 0 0 7 17 0 0 3 2 0 0 0 3 1 .00 0 68.90 +190226253110 7 0 010 310 0 7 37 3 0 0 4 2 4 0 3 2 .00 0 69.20 +19022725311113 0 71327272740154 5 0 3 5 12 12 12 27 10 .52 0 69.40 +1902282531124333233743333340285 32 18 9 22 32 18 18 27 22 .00 0 69.17 +1903012531134343333727373737294 32 32 18 22 12 22 22 22 231.15 0 68.70 +1903022531144033272017301717201 27 18 12 7 6 15 6 6 12 .73 0 68.20 +1903032531152330101013 3 723119 9 15 4 4 5 2 3 9 6 .31 0 68.30 +190304253116132713202010 723133 5 12 5 7 7 4 3 9 6 .31 0 69.70 +1903052531172310 3 710 31017 83 9 4 2 3 4 2 4 6 4 .10 5 70.80 +1903062531181017301320 72017134 4 6 15 5 7 3 7 6 7 .31 12 71.30 +190307253119 7 3 0 320232723106 3 2 0 2 7 9 12 9 6 .21 12 69.90 +19030825312023 71017 0 3 313 76 9 3 4 6 0 2 2 5 4 .10 8 70.70 +190309253121 3 0101023101023 89 2 0 4 4 9 4 4 9 4 .21 7 69.70 +1903102531222320 7 3 7 3 0 3 66 9 7 3 2 3 2 0 2 4 .10 7 70.10 +190311253123 0 01013 7 3 310 46 0 0 4 5 3 2 2 4 2 .00 8 69.50 +1903122531241713302313 71313129 6 5 15 9 5 3 5 5 7 .31 7 69.80 +190313253125102013 3 3 313 7 72 4 7 5 2 2 2 5 3 4 .10 0 70.00 +190314253126 310131023132330125 2 4 5 4 9 5 9 15 7 .31 5 69.30 +190315253127272320 7 7102710131 12 9 7 3 3 4 12 4 7 .31 0 68.90 +1903162532 11017172723232043180 4 6 6 12 9 9 7 32 11 .63 0 68.80 +1903172532 2504040271717 7 7205 48 27 27 12 6 6 3 3 16 .94 0 68.60 +1903182532 3 310 3 3 7 7 7 3 43 2 4 2 2 3 3 3 2 3 .00 9 69.30 +1903192532 41010101720132727134 4 4 4 6 7 5 12 12 7 .31 11 69.10 +1903202532 5 71713101313 713 93 3 6 5 4 5 5 3 5 4 .21 25 76.20 +1903212532 6 710 7 3 3 0 0 3 33 3 4 3 2 2 0 0 2 2 .00 28 79.40 +1903222532 7 3 010 0 0 0 0 3 16 2 0 4 0 0 0 0 2 1 .00 22 81.80 +1903232532 8 3 0 010 3 3 0 3 22 2 0 0 4 2 2 0 2 2 .00 18 78.90 +1903242532 9 3 0 3 0 0 0 020 26 2 0 2 0 0 0 0 7 1 .00 12 75.00 +1903252532102010 7 31013 323 89 7 4 3 2 4 5 2 9 4 .21 0 70.80 +1903262532112023 3 0 7 3 017 73 7 9 2 0 3 2 0 6 4 .10 0 68.70 +1903272532122017272317 717 7135 7 6 12 9 6 3 6 3 6 .31 0 68.60 +190328253213 727271730202030178 3 12 12 6 15 7 7 15 10 .52 0 68.10 +19032925321420202020 7132313136 7 7 7 7 3 5 9 5 6 .31 0 68.60 +1903302532152013 3 7 3 0 0 3 49 7 5 2 3 2 0 0 2 3 .00 0 69.20 +1903312532162737301320171310167 12 22 15 5 7 6 5 4 9 .00 0 68.63 +1904012532172313 7 7 7 7 3 3 70 9 5 3 3 3 3 2 2 3 .00 9 69.08 190402253218 7 3 7 3 7 73030 28 3 2 3 2 3 3 15 15 6 .31 12 70.80 -1904032532192337272023172027194 9 22 12 7 9 6 7 12 10 .63 14 70.60 -1904042532202717132327332710177 12 6 5 9 12 18 12 4 10 .52 5 70.30 -1904052532213033231727232727207 15 18 9 6 12 9 12 12 12 .73 5 71.80 -19040625322220272013 7 71717128 7 12 7 5 3 3 6 6 6 .31 0 73.70 -190407253223 717 31017 71320 94 3 6 2 4 6 3 5 7 4 .21 8 76.60 -1904082532242733232030332323212 12 18 9 7 15 18 9 9 12 .73 9 78.80 -1904092532253320232013202020169 18 7 9 7 5 7 7 7 8 .52 9 79.30 -1904102532263740301023333013216 22 27 15 4 9 18 15 5 14 .84 10 78.40 -190411253227132717201717 3 7121 5 12 6 7 6 6 2 3 6 .31 9 78.90 -1904122533 13020131017131723143 15 7 5 4 6 5 6 9 7 .42 10 77.70 -1904132533 2303013 310 72017130 15 15 5 2 4 3 7 6 7 .42 11 78.30 -1904142533 3 31717 3 3 7 317 70 2 6 6 2 2 3 2 6 4 .10 10 75.90 -1904152533 41313232313102320138 5 5 9 9 5 4 9 7 7 .31 9 75.90 -1904162533 52017271313 31010113 7 6 12 5 5 2 4 4 6 .31 8 74.70 -1904172533 610 3 3 3 0 71713 56 4 2 2 2 0 3 6 5 3 .10 10 76.70 -1904182533 7 0 0 0 0 7 7 7 7 28 0 0 0 0 3 3 3 3 2 .00 18 75.20 -1904192533 8 3 3131310101710 79 2 2 5 5 4 4 6 4 4 .10 16 73.30 -1904202533 913 7 3 7 7 71310 67 5 3 2 3 3 3 5 4 4 .10 8 70.60 -1904212533101310 7 7 3 0 3 3 46 5 4 3 3 2 0 2 2 3 .00 0 69.90 -190422253311 3 013 3 710 7 3 46 2 0 5 2 3 4 3 2 3 .00 0 70.20 -19042325331210 7 0 7 7203333117 4 3 0 3 3 7 18 18 7 .42 0 69.60 -1904242533133313 3201717 713123 18 5 2 7 6 6 3 5 6 .31 0 70.10 -1904252533141320171717 310 7104 5 7 6 6 6 2 4 3 5 .21 0 68.40 -190426253315 7 0 0 7 7131320 67 3 0 0 3 3 5 5 7 3 .10 0 68.00 -19042725331610 0201713102020110 4 0 7 6 5 4 7 7 5 .21 0 67.80 -19042825331710 710 310132020 93 4 3 4 2 4 5 7 7 4 .21 0 68.80 -1904292533181713 0101313 310 79 6 5 0 4 5 5 2 4 4 .10 0 67.90 -1904302533192010 0 31010 710 70 7 4 4 2 4 4 3 4 4 .00 0 69.50 -190501253320 720171320273737178 3 7 6 5 7 12 22 22 10 .63 0 68.70 -1905022533213333232320232313191 18 18 9 9 7 9 9 5 10 .63 0 70.30 -1905032533222320232323232320178 9 7 9 9 9 9 9 7 8 .31 0 69.06 -190504253323 717232723232313156 3 6 9 12 9 9 9 5 8 .42 8 73.50 -19050525332413 7 0 3 3 7 7 7 47 5 3 0 2 2 3 3 3 3 .00 9 74.70 -19050625332510 3 31017101713 83 4 2 2 4 6 4 6 5 4 .10 10 77.30 -1905072533261320 7 3101017 7 87 5 7 3 2 4 4 6 3 4 .10 18 80.10 -190508253327 7 3 0 0 0 3 310 26 3 2 0 0 0 2 2 4 2 .00 17 76.80 -1905092534 11313231710101020116 5 5 9 6 4 4 4 7 6 .21 18 77.70 -1905102534 21717 7 710232730138 6 6 3 3 4 9 12 15 7 .42 19 77.80 -1905112534 34737404037232333280 39 22 27 27 22 9 9 18 221.15 21 79.50 -1905122534 420 710 3 0101317 80 7 3 4 2 0 4 5 6 4 .10 19 77.60 -1905132534 5 7 3102010231723113 3 2 4 7 4 9 6 9 6 .21 18 76.20 -1905142534 63357673320374013300 18 67111 18 7 22 27 5 341.46 16 76.00 -1905152534 7 717 7 317202310104 3 6 3 2 6 7 9 4 5 .21 14 75.60 -1905162534 81017131013102730130 4 6 5 4 5 4 12 15 7 .31 9 75.30 -1905172534 9231010 31010 3 7 76 9 4 4 2 4 4 2 3 4 .10 9 73.80 -190518253410 7 71720 7 3 3 3 67 3 3 6 7 3 2 2 2 4 .10 9 72.20 -190519253411 0 3 7 3 3 3 320 42 0 2 3 2 2 2 2 7 2 .00 0 69.60 -190520253412331710 71010 3 7 97 18 6 4 3 4 4 2 3 6 .21 0 70.40 -190521253413 713 7 713 3 7 3 60 3 5 3 3 5 2 3 2 3 .10 0 69.70 -190522253414 3131710 7 31010 73 2 5 6 4 3 2 4 4 4 .10 0 69.00 -1905232534151010 71310101017 87 4 4 3 5 4 4 4 6 4 .10 0 68.20 -1905242534161317 7 3 7131713 90 5 6 3 2 3 5 6 5 4 .21 0 68.10 -190525253417 3 3 3 3 3131313 54 2 2 2 2 2 5 5 5 3 .10 0 68.70 -190526253418 7 7 7 3 3 3 327 60 3 3 3 2 2 2 2 12 4 .10 0 69.80 -19052725341923233317102320 7156 9 9 18 6 4 9 7 3 8 .42 0 69.30 -190528253420 710131727172327141 3 4 5 6 12 6 9 12 7 .42 0 70.00 -1905292534213333302723172730220 18 18 15 12 9 6 12 15 13 .84 9 70.10 -1905302534223020132017132017150 15 7 5 7 6 5 7 6 7 .42 0 70.60 -190531253423171313 7 7 3 7 3 70 6 5 5 3 3 2 3 2 4 .00 0 70.60 -190601253424 7 3 7 3 0 3 7 7 37 3 2 3 2 0 2 3 3 2 .00 0 71.70 -19060225342520 7 0 0 3 3 710 50 7 3 0 0 2 2 3 4 3 .00 0 71.90 -190603253426 3 0 3131313 710 62 2 0 2 5 5 5 3 4 3 .10 0 71.80 -1906042534271313131020232320135 5 5 5 4 7 9 9 7 6 .31 0 72.10 -1906052535 120 7 7 7 3 7 7 3 61 7 3 3 3 2 3 3 2 3 .10 0 71.80 -1906062535 2 710 7 3 3 0 3 3 36 3 4 3 2 2 0 2 2 2 .00 0 70.90 -1906072535 3 3 3 7 71310 710 60 2 2 3 3 5 4 3 4 3 .10 0 71.00 -1906082535 4 7 7 31730475333197 3 3 2 6 15 39 56 18 181.05 0 70.50 -1906092535 5301713101010 713110 15 6 5 4 4 4 3 5 6 .31 0 70.50 -1906102535 6 3 3 0 3 7 7 7 7 37 2 2 0 2 3 3 3 3 2 .00 0 71.00 -1906112535 7 7 7 3 0 3 3 7 7 37 3 3 2 0 2 2 3 3 2 .00 0 71.90 -1906122535 8101010 713 7 3 3 63 4 4 4 3 5 3 2 2 3 .10 0 71.60 -1906132535 91317201323171340156 5 6 7 5 9 6 5 27 9 .52 0 69.60 -190614253510231723171710 3 7117 9 6 9 6 6 4 2 3 6 .31 0 70.10 -190615253511 3131313 7 3 0 7 59 2 5 5 5 3 2 0 3 3 .10 0 68.80 -190616253512101310 3 3 7 3 7 56 4 5 4 2 2 3 2 3 3 .10 0 68.00 -190617253513 0 3 3 7 7 3 3 3 29 0 2 2 3 3 2 2 2 2 .00 0 68.50 -190618253514 3 3 3 313 7 7 7 46 2 2 2 2 5 3 3 3 3 .00 0 69.20 -19061925351510 3 71010 3 3 7 53 4 2 3 4 4 2 2 3 3 .10 0 70.20 -190620253516 7202020 7102020124 3 7 7 7 3 4 7 7 6 .31 0 69.90 -1906212535171317101313 71323109 5 6 4 5 5 3 5 9 5 .21 0 68.60 -190622253518131717 7 3 7 7 3 74 5 6 6 3 2 3 3 2 4 .10 0 68.60 -190623253519 0 0 3 713 7 3 7 40 0 0 2 3 5 3 2 3 2 .00 0 69.50 -1906242535201717 71013 713 7 91 6 6 3 4 5 3 5 3 4 .21 7 70.20 -190625253521 7 7 3 710 3 713 57 3 3 2 3 4 2 3 5 3 .10 8 70.20 -190626253522171320171010 313103 6 5 7 6 4 4 2 5 5 .21 7 70.30 -1906272535231310 0 710 71010 67 5 4 0 3 4 3 4 4 3 .10 0 69.30 -1906282535241710 7 3 7 71010 71 6 4 3 2 3 3 4 4 4 .10 0 70.40 -190629253525 3 710 3 7 3 310 46 2 3 4 2 3 2 2 4 3 .00 0 69.90 -19063025352623 3 3 313 3 310 61 9 2 2 2 5 2 2 4 4 .00 0 69.70 -1907012535272330231720101317153 9 15 9 6 7 4 5 6 8 .42 0 70.50 -1907022536 113 7 710101723 3 90 5 3 3 4 4 6 9 2 4 .21 0 69.50 -1907032536 2 0 01013131313 3 65 0 0 4 5 5 5 5 2 3 .10 0 69.10 -1907042536 3 3 7 3 320132020 89 2 3 2 2 7 5 7 7 4 .21 0 69.90 -1907052536 417 7101017 7 0 3 71 6 3 4 4 6 3 0 2 4 .10 0 69.00 -1907062536 51010 7 3 3 0 3 7 43 4 4 3 2 2 0 2 3 2 .00 0 68.80 -1907072536 6 710131010 71017 84 3 4 5 4 4 3 4 6 4 .10 7 69.60 -1907082536 72717 7 0 3 73033124 12 6 3 0 2 3 15 18 7 .42 0 68.70 -1907092536 83020201717274733211 15 7 7 6 6 12 39 18 14 .84 0 69.70 -1907102536 91743433320131017196 6 32 32 18 7 5 4 6 14 .84 0 70.10 -1907112536102723301310 7 7 7124 12 9 15 5 4 3 3 3 7 .31 0 69.40 -1907122536111013201713 3 713 96 4 5 7 6 5 2 3 5 5 .21 0 69.00 -190713253612 3 7101717232017114 2 3 4 6 6 9 7 6 5 .21 0 68.20 -19071425361320 710 7 7101323 97 7 3 4 3 3 4 5 9 5 .21 0 69.40 -19071525361427171023131023 3126 12 6 4 9 5 4 9 2 6 .31 0 69.30 -190716253615 313171310 71313 89 2 5 6 5 4 3 5 5 4 .21 0 69.50 -1907172536161323171317 71317120 5 9 6 5 6 3 5 6 6 .31 0 70.00 -190718253617 7 3 3 710 7 310 50 3 2 2 3 4 3 2 4 3 .10 0 69.20 -190719253618 7 3 310 7 7 713 57 3 2 2 4 3 3 3 5 3 .10 0 68.90 -190720253619 0 3 7 3 7 3 7 3 33 0 2 3 2 3 2 3 2 2 .00 0 69.10 -190721253620 7 71717 7173037139 3 3 6 6 3 6 15 22 8 .42 0 69.80 -1907222536211313232323172013145 5 5 9 9 9 6 7 5 7 .31 9 69.50 -190723253622 720202020 7 320117 3 7 7 7 7 3 2 7 5 .21 0 69.60 -1907242536231010 0 713131313 79 4 4 0 3 5 5 5 5 4 .10 0 70.00 -190725253624 3 3 0 3 710 310 39 2 2 0 2 3 4 2 4 2 .00 0 70.30 -190726253625 0 0 3 3 3 3 3 7 22 0 0 2 2 2 2 2 3 2 .00 0 69.80 -190727253626 7 7 313 3102013 76 3 3 2 5 2 4 7 5 4 .10 0 68.70 -19072825362717171010 7 7 7 3 78 6 6 4 4 3 3 3 2 4 .10 0 69.20 -1907292537 1201717 31010 3 7 87 7 6 6 2 4 4 2 3 4 .10 0 68.20 -1907302537 217 3 0 327332027130 6 2 0 2 12 18 7 12 7 .42 0 68.30 -1907312537 327132713 7101320130 12 5 12 5 3 4 5 7 7 .00 0 68.90 -1908012537 43317272017171720168 18 6 12 7 6 6 6 7 8 .00 0 68.80 -1908022537 5101010 7 3 3 710 60 4 4 4 3 2 2 3 4 3 .10 0 68.90 -1908032537 6 7 3 0 3 0 3 7 3 26 3 2 0 2 0 2 3 2 2 .00 0 67.70 -1908042537 7 3 71710 3 3 013 56 2 3 6 4 2 2 0 5 3 .10 0 68.80 -1908052537 81030505350533733316 4 15 48 56 48 56 22 18 331.36 9 70.10 -1908062537 93027233023171027187 15 12 9 15 9 6 4 12 10 .63 0 70.10 -19080725371023171013 7101020110 9 6 4 5 3 4 4 7 5 .21 7 69.90 -1908082537111717131027171010121 6 6 5 4 12 6 4 4 6 .31 0 70.60 -190809253712 310131717231327123 2 4 5 6 6 9 5 12 6 .31 0 69.10 -1908102537132717171713101317131 12 6 6 6 5 4 5 6 6 .31 0 69.10 -190811253714 310131720101020103 2 4 5 6 7 4 4 7 5 .21 0 69.50 -1908122537151010101313 71017 90 4 4 4 5 5 3 4 6 4 .21 0 69.00 -1908132537162017102317171017131 7 6 4 9 6 6 4 6 6 .31 0 68.60 -1908142537171310101310 7 3 3 69 5 4 4 5 4 3 2 2 4 .10 0 69.10 -190815253718 0 7 7 7 7 71310 58 0 3 3 3 3 3 5 4 3 .10 0 69.40 -19081625371913 7172010 3 7 7 84 5 3 6 7 4 2 3 3 4 .10 0 69.20 -19081725372010201013 7 7 0 3 70 4 7 4 5 3 3 0 2 4 .10 0 69.70 -190818253721272017 7 3 71013104 12 7 6 3 2 3 4 5 5 .21 0 69.20 -190819253722 713 3 3 710 310 56 3 5 2 2 3 4 2 4 3 .10 0 69.30 -1908202537231713 3 710 7 3 7 67 6 5 2 3 4 3 2 3 4 .10 0 68.90 -190821253724131310 3 7131010 79 5 5 4 2 3 5 4 4 4 .10 0 68.40 -19082225372513 71317 7102317107 5 3 5 6 3 4 9 6 5 .21 0 67.30 -19082325372610201310 3 3 7 7 73 4 7 5 4 2 2 3 3 4 .10 0 68.00 -1908242537272313 313 310 7 3 75 9 5 2 5 2 4 3 2 4 .10 0 67.80 -1908252538 1101020 3 3 3 313 65 4 4 7 2 2 2 2 5 4 .10 0 67.40 -1908262538 217 3102010 71323103 6 2 4 7 4 3 5 9 5 .21 0 67.20 -1908272538 32733202720202323193 12 18 7 12 7 7 9 9 10 .63 0 67.50 -1908282538 4201713 7 7 7 3 3 77 7 6 5 3 3 3 2 2 4 .10 0 67.20 -1908292538 510 0 0 3131010 7 53 4 0 0 2 5 4 4 3 3 .00 0 67.20 -1908302538 61013101323273330159 4 5 4 5 9 12 18 15 9 .52 0 67.80 -1908312538 73743405357434040353 22 32 27 56 67 32 27 27 36 .00 0 67.70 -1909012538 84750535050404347380 39 48 56 48 48 27 32 39 421.57 9 68.30 -1909022538 95037373020274033274 48 22 22 15 7 12 27 18 211.15 9 70.00 -1909032538103327232017131717167 18 12 9 7 6 5 6 6 9 .52 5 69.80 -1909042538113027272023202720194 15 12 12 7 9 7 12 7 10 .63 0 69.80 -1909052538123743302713132023206 22 32 15 12 5 5 7 9 13 .84 0 69.40 -19090625381320372027 7 31710141 7 22 7 12 3 2 6 4 8 .42 0 70.00 -190907253814 717231317171323130 3 6 9 5 6 6 5 9 6 .31 0 75.00 -1909082538151723231713172330163 6 9 9 6 5 6 9 15 8 .42 0 68.50 -1909092538163323303323331723215 18 9 15 18 9 18 6 9 13 .73 0 69.80 -1909102538171313102017 3 0 3 79 5 5 4 7 6 2 0 2 4 .10 0 70.90 -190911253818101020171010 7 7 91 4 4 7 6 4 4 3 3 4 .21 0 69.00 -1909122538191710171713171310114 6 4 6 6 5 6 5 4 5 .21 0 70.30 -1909132538202027271717131310144 7 12 12 6 6 5 5 4 7 .42 0 69.10 -190914253821 320201713 71720117 2 7 7 6 5 3 6 7 5 .21 0 69.40 -1909152538221027201713172027151 4 12 7 6 5 6 7 12 7 .42 0 68.40 -19091625382337401710 7172020168 22 27 6 4 3 6 7 7 10 .63 0 69.40 -1909172538243317 7 7 3 72337134 18 6 3 3 2 3 9 22 8 .42 0 68.20 -1909182538252720232027 71013147 12 7 9 7 12 3 4 5 7 .42 0 66.90 -19091925382610 710 7 7 313 3 60 4 3 4 3 3 2 5 2 3 .10 0 67.70 -19092025382710 3 3 3 7 3 7 7 43 4 2 2 2 3 2 3 3 3 .00 0 67.70 -1909212539 12320271717101013137 9 7 12 6 6 4 4 5 7 .31 0 68.20 -1909222539 22313 3 3 0 3 7 7 59 9 5 2 2 0 2 3 3 3 .10 0 68.80 -1909232539 3 3 0 3 7 310 710 43 2 0 2 3 2 4 3 4 2 .00 0 66.60 -1909242539 4302723 733372710194 15 12 9 3 18 22 12 4 12 .73 0 67.50 -1909252539 5 7101717 3 7 313 77 3 4 6 6 2 3 2 5 4 .10 0 67.90 -1909262539 627 7 3 3 3 0 010 53 12 3 2 2 2 0 0 4 3 .10 0 67.40 -1909272539 7 710201733435350233 3 4 7 6 18 32 56 48 221.15 0 66.80 -1909282539 82743434333303740296 12 32 32 32 18 15 22 27 241.15 0 67.50 -1909292539 92327231710333333199 9 12 9 6 4 18 18 18 12 .73 0 67.70 -1909302539103037372720271730225 15 22 22 12 7 12 6 15 14 .00 0 68.10 -1910012539113340302310 0 713156 18 27 15 9 4 0 3 5 10 .63 7 68.80 -19100225391230 0 02027101023120 15 0 0 7 12 4 4 9 6 .31 8 68.40 -19100325391317131310 3 31310 82 6 5 5 4 2 2 5 4 4 .10 0 68.30 -19100425391410132717202017 7131 4 5 12 6 7 7 6 3 6 .31 0 68.10 -1910052539151313102017171730137 5 5 4 7 6 6 6 15 7 .31 0 67.80 -191006253916132017131010 0 3 86 5 7 6 5 4 4 0 2 4 .10 0 67.30 -191007253917 7 710 717232323117 3 3 4 3 6 9 9 9 6 .31 0 67.60 -191008253918171313 7 7 71713 94 6 5 5 3 3 3 6 5 4 .21 0 67.00 -1910092539191723203317171013150 6 9 7 18 6 6 4 5 8 .42 0 67.90 -1910102539201343402013271317186 5 32 27 7 5 12 5 6 12 .73 0 67.30 -191011253921 710232017302317147 3 4 9 7 6 15 9 6 7 .42 0 68.30 -1910122539222020 713 7 3 7 3 80 7 7 3 5 3 2 3 2 4 .10 0 68.00 -191013253923 7 0 0 0 0 0 0 3 10 3 0 0 0 0 0 0 2 1 .00 0 66.90 -1910142539241017101010201710104 4 6 4 4 4 7 6 4 5 .21 0 65.80 -19101525392523 7 0 3 0 31310 59 9 3 0 2 0 2 5 4 3 .10 0 66.90 -19101625392613172010 7 32017107 5 6 7 4 3 2 7 6 5 .21 0 65.90 -19101725392720171717 7101010108 7 6 6 6 3 4 4 4 5 .21 0 65.60 -1910182540 11020171013101017107 4 7 6 4 5 4 4 6 5 .21 0 65.60 -1910192540 210 7 71313171310 90 4 3 3 5 5 6 5 4 4 .21 0 65.50 -1910202540 3 71310 7 7 71323 87 3 5 4 3 3 3 5 9 4 .21 0 64.40 -1910212540 427 7 717 7 01013 88 12 3 3 6 3 0 4 5 4 .21 0 63.40 -1910222540 5 3 3 7 7 31313 3 52 2 2 3 3 2 5 5 2 3 .10 0 64.90 -1910232540 6 3 0 0 0 3 7 3 3 19 2 0 0 0 2 3 2 2 1 .00 0 63.90 -1910242540 7 313133730434343225 2 5 5 22 15 32 32 32 181.05 0 64.30 -1910252540 84340534033332323288 32 27 56 27 18 18 9 9 241.26 0 67.90 -1910262540 93730304340434037300 22 15 15 32 27 32 27 22 241.26 0 67.80 -1910272540104033302017273727231 27 18 15 7 6 12 22 12 15 .84 0 68.00 -1910282540112327332017202727194 9 12 18 7 6 7 12 12 10 .63 0 68.50 -1910292540122727 7 0 3232013120 12 12 3 0 2 9 7 5 6 .31 0 68.20 -1910302540131013131023232323138 4 5 5 4 9 9 9 9 7 .31 0 68.80 -19103125401437 3 313 0 71017 90 22 2 2 5 5 3 4 6 6 .00 0 70.20 -1911012540151323 7 7 7 3 3 0 63 5 9 3 3 3 2 2 0 3 .10 5 69.60 -191102254016 3 0 0 0 0 0 310 16 2 0 0 0 0 0 2 4 1 .00 0 69.60 -19110325401710 3 0 0 0 0 0 7 20 4 2 0 0 0 0 0 3 1 .00 0 68.30 -1911042540181010171010 7 7 3 74 4 4 6 4 4 3 3 2 4 .10 0 69.60 -1911052540191310 3 710171717 94 5 4 2 3 4 6 6 6 4 .21 0 69.20 -1911062540201710 7 720131323110 6 4 3 3 7 5 5 9 5 .21 0 68.10 -1911072540212017 710 0 7 3 7 71 7 6 3 4 0 3 2 3 4 .10 0 68.50 -191108254022 7 0 310 7 7 710 51 3 0 2 4 3 3 3 4 3 .00 0 68.90 -1911092540232317 0 3 7 7 317 77 9 6 0 2 3 3 2 6 4 .10 0 68.30 -19111025402413 31310 3 0 0 3 45 5 2 5 4 2 0 0 2 2 .00 0 69.40 -191111254025 313172720201723140 2 5 6 12 7 7 6 9 7 .31 0 68.10 -19111225402620 3 7 71013 3 0 63 7 2 3 3 4 5 2 0 3 .10 0 69.30 -191113254027 0 0 0 0 0 0 713 20 0 0 0 0 0 0 3 5 1 .00 0 69.60 -1911142541 12310 3 7 7 3 3 3 59 9 4 2 3 3 2 2 2 3 .10 0 68.40 -1911152541 2 3 3 0 7 01017 7 47 2 2 0 3 0 4 6 3 2 .00 0 68.50 -1911162541 31720 3 713172320120 6 7 2 3 5 6 9 7 6 .31 0 68.20 -1911172541 41310 7 0 3 31327 76 5 4 3 0 2 2 5 12 4 .10 0 68.50 -1911182541 5 0 0 0 0 3 0 3 3 9 0 0 0 0 2 0 2 2 1 .00 0 68.80 -1911192541 6 013 3 0 0 710 0 33 0 5 2 0 0 3 4 0 2 .00 0 67.60 -1911202541 7 010 0 0 0 0 010 20 0 4 0 0 0 0 0 4 1 .00 0 68.50 -1911212541 81717131320303037177 6 6 5 5 7 15 15 22 10 .63 0 69.10 -1911222541 93720232027303023210 22 7 9 7 12 15 15 9 12 .73 0 67.90 -1911232541102723132727232720187 12 9 5 12 12 9 12 7 10 .52 0 68.50 -1911242541113330271727271327201 18 15 12 6 12 12 5 12 12 .73 0 68.80 -19112525411220 71013 310 720 90 7 3 4 5 2 4 3 7 4 .21 0 67.70 -1911262541132020 0 0 0 3 3 3 49 7 7 0 0 0 2 2 2 2 .00 0 68.60 -191127254114 3 71010 71713 7 74 2 3 4 4 3 6 5 3 4 .10 0 69.60 -19112825411513 3 3 3 71020 7 66 5 2 2 2 3 4 7 3 4 .10 0 68.30 -191129254116 710 7 7 3101730 91 3 4 3 3 2 4 6 15 5 .21 0 67.90 -19113025411713 7 3 3 7 71020 70 5 3 2 2 3 3 4 7 4 .00 0 68.50 -19120125411810 7 0 0 7 71317 61 4 3 0 0 3 3 5 6 3 .10 0 69.20 -191202254119 310 7 0 0 0 0 3 23 2 4 3 0 0 0 0 2 1 .00 0 68.40 -191203254120 3 3 0 3 0 3 3 7 22 2 2 0 2 0 2 2 3 2 .00 0 67.90 -1912042541211017 7 3 7 010 3 57 4 6 3 2 3 0 4 2 3 .10 0 67.60 -191205254122 3 0 0 7 7 7 3 3 30 2 0 0 3 3 3 2 2 2 .00 0 68.60 +1904032532192337272023172027194 9 22 12 7 9 6 7 12 10 .63 14 70.60 +1904042532202717132327332710177 12 6 5 9 12 18 12 4 10 .52 5 70.30 +1904052532213033231727232727207 15 18 9 6 12 9 12 12 12 .73 5 71.80 +19040625322220272013 7 71717128 7 12 7 5 3 3 6 6 6 .31 0 73.70 +190407253223 717 31017 71320 94 3 6 2 4 6 3 5 7 4 .21 8 76.60 +1904082532242733232030332323212 12 18 9 7 15 18 9 9 12 .73 9 78.80 +1904092532253320232013202020169 18 7 9 7 5 7 7 7 8 .52 9 79.30 +1904102532263740301023333013216 22 27 15 4 9 18 15 5 14 .84 10 78.40 +190411253227132717201717 3 7121 5 12 6 7 6 6 2 3 6 .31 9 78.90 +1904122533 13020131017131723143 15 7 5 4 6 5 6 9 7 .42 10 77.70 +1904132533 2303013 310 72017130 15 15 5 2 4 3 7 6 7 .42 11 78.30 +1904142533 3 31717 3 3 7 317 70 2 6 6 2 2 3 2 6 4 .10 10 75.90 +1904152533 41313232313102320138 5 5 9 9 5 4 9 7 7 .31 9 75.90 +1904162533 52017271313 31010113 7 6 12 5 5 2 4 4 6 .31 8 74.70 +1904172533 610 3 3 3 0 71713 56 4 2 2 2 0 3 6 5 3 .10 10 76.70 +1904182533 7 0 0 0 0 7 7 7 7 28 0 0 0 0 3 3 3 3 2 .00 18 75.20 +1904192533 8 3 3131310101710 79 2 2 5 5 4 4 6 4 4 .10 16 73.30 +1904202533 913 7 3 7 7 71310 67 5 3 2 3 3 3 5 4 4 .10 8 70.60 +1904212533101310 7 7 3 0 3 3 46 5 4 3 3 2 0 2 2 3 .00 0 69.90 +190422253311 3 013 3 710 7 3 46 2 0 5 2 3 4 3 2 3 .00 0 70.20 +19042325331210 7 0 7 7203333117 4 3 0 3 3 7 18 18 7 .42 0 69.60 +1904242533133313 3201717 713123 18 5 2 7 6 6 3 5 6 .31 0 70.10 +1904252533141320171717 310 7104 5 7 6 6 6 2 4 3 5 .21 0 68.40 +190426253315 7 0 0 7 7131320 67 3 0 0 3 3 5 5 7 3 .10 0 68.00 +19042725331610 0201713102020110 4 0 7 6 5 4 7 7 5 .21 0 67.80 +19042825331710 710 310132020 93 4 3 4 2 4 5 7 7 4 .21 0 68.80 +1904292533181713 0101313 310 79 6 5 0 4 5 5 2 4 4 .10 0 67.90 +1904302533192010 0 31010 710 70 7 4 4 2 4 4 3 4 4 .00 0 69.50 +190501253320 720171320273737178 3 7 6 5 7 12 22 22 10 .63 0 68.70 +1905022533213333232320232313191 18 18 9 9 7 9 9 5 10 .63 0 70.30 +1905032533222320232323232320178 9 7 9 9 9 9 9 7 8 .31 0 69.06 +190504253323 717232723232313156 3 6 9 12 9 9 9 5 8 .42 8 73.50 +19050525332413 7 0 3 3 7 7 7 47 5 3 0 2 2 3 3 3 3 .00 9 74.70 +19050625332510 3 31017101713 83 4 2 2 4 6 4 6 5 4 .10 10 77.30 +1905072533261320 7 3101017 7 87 5 7 3 2 4 4 6 3 4 .10 18 80.10 +190508253327 7 3 0 0 0 3 310 26 3 2 0 0 0 2 2 4 2 .00 17 76.80 +1905092534 11313231710101020116 5 5 9 6 4 4 4 7 6 .21 18 77.70 +1905102534 21717 7 710232730138 6 6 3 3 4 9 12 15 7 .42 19 77.80 +1905112534 34737404037232333280 39 22 27 27 22 9 9 18 221.15 21 79.50 +1905122534 420 710 3 0101317 80 7 3 4 2 0 4 5 6 4 .10 19 77.60 +1905132534 5 7 3102010231723113 3 2 4 7 4 9 6 9 6 .21 18 76.20 +1905142534 63357673320374013300 18 67111 18 7 22 27 5 341.46 16 76.00 +1905152534 7 717 7 317202310104 3 6 3 2 6 7 9 4 5 .21 14 75.60 +1905162534 81017131013102730130 4 6 5 4 5 4 12 15 7 .31 9 75.30 +1905172534 9231010 31010 3 7 76 9 4 4 2 4 4 2 3 4 .10 9 73.80 +190518253410 7 71720 7 3 3 3 67 3 3 6 7 3 2 2 2 4 .10 9 72.20 +190519253411 0 3 7 3 3 3 320 42 0 2 3 2 2 2 2 7 2 .00 0 69.60 +190520253412331710 71010 3 7 97 18 6 4 3 4 4 2 3 6 .21 0 70.40 +190521253413 713 7 713 3 7 3 60 3 5 3 3 5 2 3 2 3 .10 0 69.70 +190522253414 3131710 7 31010 73 2 5 6 4 3 2 4 4 4 .10 0 69.00 +1905232534151010 71310101017 87 4 4 3 5 4 4 4 6 4 .10 0 68.20 +1905242534161317 7 3 7131713 90 5 6 3 2 3 5 6 5 4 .21 0 68.10 +190525253417 3 3 3 3 3131313 54 2 2 2 2 2 5 5 5 3 .10 0 68.70 +190526253418 7 7 7 3 3 3 327 60 3 3 3 2 2 2 2 12 4 .10 0 69.80 +19052725341923233317102320 7156 9 9 18 6 4 9 7 3 8 .42 0 69.30 +190528253420 710131727172327141 3 4 5 6 12 6 9 12 7 .42 0 70.00 +1905292534213333302723172730220 18 18 15 12 9 6 12 15 13 .84 9 70.10 +1905302534223020132017132017150 15 7 5 7 6 5 7 6 7 .42 0 70.60 +190531253423171313 7 7 3 7 3 70 6 5 5 3 3 2 3 2 4 .00 0 70.60 +190601253424 7 3 7 3 0 3 7 7 37 3 2 3 2 0 2 3 3 2 .00 0 71.70 +19060225342520 7 0 0 3 3 710 50 7 3 0 0 2 2 3 4 3 .00 0 71.90 +190603253426 3 0 3131313 710 62 2 0 2 5 5 5 3 4 3 .10 0 71.80 +1906042534271313131020232320135 5 5 5 4 7 9 9 7 6 .31 0 72.10 +1906052535 120 7 7 7 3 7 7 3 61 7 3 3 3 2 3 3 2 3 .10 0 71.80 +1906062535 2 710 7 3 3 0 3 3 36 3 4 3 2 2 0 2 2 2 .00 0 70.90 +1906072535 3 3 3 7 71310 710 60 2 2 3 3 5 4 3 4 3 .10 0 71.00 +1906082535 4 7 7 31730475333197 3 3 2 6 15 39 56 18 181.05 0 70.50 +1906092535 5301713101010 713110 15 6 5 4 4 4 3 5 6 .31 0 70.50 +1906102535 6 3 3 0 3 7 7 7 7 37 2 2 0 2 3 3 3 3 2 .00 0 71.00 +1906112535 7 7 7 3 0 3 3 7 7 37 3 3 2 0 2 2 3 3 2 .00 0 71.90 +1906122535 8101010 713 7 3 3 63 4 4 4 3 5 3 2 2 3 .10 0 71.60 +1906132535 91317201323171340156 5 6 7 5 9 6 5 27 9 .52 0 69.60 +190614253510231723171710 3 7117 9 6 9 6 6 4 2 3 6 .31 0 70.10 +190615253511 3131313 7 3 0 7 59 2 5 5 5 3 2 0 3 3 .10 0 68.80 +190616253512101310 3 3 7 3 7 56 4 5 4 2 2 3 2 3 3 .10 0 68.00 +190617253513 0 3 3 7 7 3 3 3 29 0 2 2 3 3 2 2 2 2 .00 0 68.50 +190618253514 3 3 3 313 7 7 7 46 2 2 2 2 5 3 3 3 3 .00 0 69.20 +19061925351510 3 71010 3 3 7 53 4 2 3 4 4 2 2 3 3 .10 0 70.20 +190620253516 7202020 7102020124 3 7 7 7 3 4 7 7 6 .31 0 69.90 +1906212535171317101313 71323109 5 6 4 5 5 3 5 9 5 .21 0 68.60 +190622253518131717 7 3 7 7 3 74 5 6 6 3 2 3 3 2 4 .10 0 68.60 +190623253519 0 0 3 713 7 3 7 40 0 0 2 3 5 3 2 3 2 .00 0 69.50 +1906242535201717 71013 713 7 91 6 6 3 4 5 3 5 3 4 .21 7 70.20 +190625253521 7 7 3 710 3 713 57 3 3 2 3 4 2 3 5 3 .10 8 70.20 +190626253522171320171010 313103 6 5 7 6 4 4 2 5 5 .21 7 70.30 +1906272535231310 0 710 71010 67 5 4 0 3 4 3 4 4 3 .10 0 69.30 +1906282535241710 7 3 7 71010 71 6 4 3 2 3 3 4 4 4 .10 0 70.40 +190629253525 3 710 3 7 3 310 46 2 3 4 2 3 2 2 4 3 .00 0 69.90 +19063025352623 3 3 313 3 310 61 9 2 2 2 5 2 2 4 4 .00 0 69.70 +1907012535272330231720101317153 9 15 9 6 7 4 5 6 8 .42 0 70.50 +1907022536 113 7 710101723 3 90 5 3 3 4 4 6 9 2 4 .21 0 69.50 +1907032536 2 0 01013131313 3 65 0 0 4 5 5 5 5 2 3 .10 0 69.10 +1907042536 3 3 7 3 320132020 89 2 3 2 2 7 5 7 7 4 .21 0 69.90 +1907052536 417 7101017 7 0 3 71 6 3 4 4 6 3 0 2 4 .10 0 69.00 +1907062536 51010 7 3 3 0 3 7 43 4 4 3 2 2 0 2 3 2 .00 0 68.80 +1907072536 6 710131010 71017 84 3 4 5 4 4 3 4 6 4 .10 7 69.60 +1907082536 72717 7 0 3 73033124 12 6 3 0 2 3 15 18 7 .42 0 68.70 +1907092536 83020201717274733211 15 7 7 6 6 12 39 18 14 .84 0 69.70 +1907102536 91743433320131017196 6 32 32 18 7 5 4 6 14 .84 0 70.10 +1907112536102723301310 7 7 7124 12 9 15 5 4 3 3 3 7 .31 0 69.40 +1907122536111013201713 3 713 96 4 5 7 6 5 2 3 5 5 .21 0 69.00 +190713253612 3 7101717232017114 2 3 4 6 6 9 7 6 5 .21 0 68.20 +19071425361320 710 7 7101323 97 7 3 4 3 3 4 5 9 5 .21 0 69.40 +19071525361427171023131023 3126 12 6 4 9 5 4 9 2 6 .31 0 69.30 +190716253615 313171310 71313 89 2 5 6 5 4 3 5 5 4 .21 0 69.50 +1907172536161323171317 71317120 5 9 6 5 6 3 5 6 6 .31 0 70.00 +190718253617 7 3 3 710 7 310 50 3 2 2 3 4 3 2 4 3 .10 0 69.20 +190719253618 7 3 310 7 7 713 57 3 2 2 4 3 3 3 5 3 .10 0 68.90 +190720253619 0 3 7 3 7 3 7 3 33 0 2 3 2 3 2 3 2 2 .00 0 69.10 +190721253620 7 71717 7173037139 3 3 6 6 3 6 15 22 8 .42 0 69.80 +1907222536211313232323172013145 5 5 9 9 9 6 7 5 7 .31 9 69.50 +190723253622 720202020 7 320117 3 7 7 7 7 3 2 7 5 .21 0 69.60 +1907242536231010 0 713131313 79 4 4 0 3 5 5 5 5 4 .10 0 70.00 +190725253624 3 3 0 3 710 310 39 2 2 0 2 3 4 2 4 2 .00 0 70.30 +190726253625 0 0 3 3 3 3 3 7 22 0 0 2 2 2 2 2 3 2 .00 0 69.80 +190727253626 7 7 313 3102013 76 3 3 2 5 2 4 7 5 4 .10 0 68.70 +19072825362717171010 7 7 7 3 78 6 6 4 4 3 3 3 2 4 .10 0 69.20 +1907292537 1201717 31010 3 7 87 7 6 6 2 4 4 2 3 4 .10 0 68.20 +1907302537 217 3 0 327332027130 6 2 0 2 12 18 7 12 7 .42 0 68.30 +1907312537 327132713 7101320130 12 5 12 5 3 4 5 7 7 .00 0 68.90 +1908012537 43317272017171720168 18 6 12 7 6 6 6 7 8 .00 0 68.80 +1908022537 5101010 7 3 3 710 60 4 4 4 3 2 2 3 4 3 .10 0 68.90 +1908032537 6 7 3 0 3 0 3 7 3 26 3 2 0 2 0 2 3 2 2 .00 0 67.70 +1908042537 7 3 71710 3 3 013 56 2 3 6 4 2 2 0 5 3 .10 0 68.80 +1908052537 81030505350533733316 4 15 48 56 48 56 22 18 331.36 9 70.10 +1908062537 93027233023171027187 15 12 9 15 9 6 4 12 10 .63 0 70.10 +19080725371023171013 7101020110 9 6 4 5 3 4 4 7 5 .21 7 69.90 +1908082537111717131027171010121 6 6 5 4 12 6 4 4 6 .31 0 70.60 +190809253712 310131717231327123 2 4 5 6 6 9 5 12 6 .31 0 69.10 +1908102537132717171713101317131 12 6 6 6 5 4 5 6 6 .31 0 69.10 +190811253714 310131720101020103 2 4 5 6 7 4 4 7 5 .21 0 69.50 +1908122537151010101313 71017 90 4 4 4 5 5 3 4 6 4 .21 0 69.00 +1908132537162017102317171017131 7 6 4 9 6 6 4 6 6 .31 0 68.60 +1908142537171310101310 7 3 3 69 5 4 4 5 4 3 2 2 4 .10 0 69.10 +190815253718 0 7 7 7 7 71310 58 0 3 3 3 3 3 5 4 3 .10 0 69.40 +19081625371913 7172010 3 7 7 84 5 3 6 7 4 2 3 3 4 .10 0 69.20 +19081725372010201013 7 7 0 3 70 4 7 4 5 3 3 0 2 4 .10 0 69.70 +190818253721272017 7 3 71013104 12 7 6 3 2 3 4 5 5 .21 0 69.20 +190819253722 713 3 3 710 310 56 3 5 2 2 3 4 2 4 3 .10 0 69.30 +1908202537231713 3 710 7 3 7 67 6 5 2 3 4 3 2 3 4 .10 0 68.90 +190821253724131310 3 7131010 79 5 5 4 2 3 5 4 4 4 .10 0 68.40 +19082225372513 71317 7102317107 5 3 5 6 3 4 9 6 5 .21 0 67.30 +19082325372610201310 3 3 7 7 73 4 7 5 4 2 2 3 3 4 .10 0 68.00 +1908242537272313 313 310 7 3 75 9 5 2 5 2 4 3 2 4 .10 0 67.80 +1908252538 1101020 3 3 3 313 65 4 4 7 2 2 2 2 5 4 .10 0 67.40 +1908262538 217 3102010 71323103 6 2 4 7 4 3 5 9 5 .21 0 67.20 +1908272538 32733202720202323193 12 18 7 12 7 7 9 9 10 .63 0 67.50 +1908282538 4201713 7 7 7 3 3 77 7 6 5 3 3 3 2 2 4 .10 0 67.20 +1908292538 510 0 0 3131010 7 53 4 0 0 2 5 4 4 3 3 .00 0 67.20 +1908302538 61013101323273330159 4 5 4 5 9 12 18 15 9 .52 0 67.80 +1908312538 73743405357434040353 22 32 27 56 67 32 27 27 36 .00 0 67.70 +1909012538 84750535050404347380 39 48 56 48 48 27 32 39 421.57 9 68.30 +1909022538 95037373020274033274 48 22 22 15 7 12 27 18 211.15 9 70.00 +1909032538103327232017131717167 18 12 9 7 6 5 6 6 9 .52 5 69.80 +1909042538113027272023202720194 15 12 12 7 9 7 12 7 10 .63 0 69.80 +1909052538123743302713132023206 22 32 15 12 5 5 7 9 13 .84 0 69.40 +19090625381320372027 7 31710141 7 22 7 12 3 2 6 4 8 .42 0 70.00 +190907253814 717231317171323130 3 6 9 5 6 6 5 9 6 .31 0 75.00 +1909082538151723231713172330163 6 9 9 6 5 6 9 15 8 .42 0 68.50 +1909092538163323303323331723215 18 9 15 18 9 18 6 9 13 .73 0 69.80 +1909102538171313102017 3 0 3 79 5 5 4 7 6 2 0 2 4 .10 0 70.90 +190911253818101020171010 7 7 91 4 4 7 6 4 4 3 3 4 .21 0 69.00 +1909122538191710171713171310114 6 4 6 6 5 6 5 4 5 .21 0 70.30 +1909132538202027271717131310144 7 12 12 6 6 5 5 4 7 .42 0 69.10 +190914253821 320201713 71720117 2 7 7 6 5 3 6 7 5 .21 0 69.40 +1909152538221027201713172027151 4 12 7 6 5 6 7 12 7 .42 0 68.40 +19091625382337401710 7172020168 22 27 6 4 3 6 7 7 10 .63 0 69.40 +1909172538243317 7 7 3 72337134 18 6 3 3 2 3 9 22 8 .42 0 68.20 +1909182538252720232027 71013147 12 7 9 7 12 3 4 5 7 .42 0 66.90 +19091925382610 710 7 7 313 3 60 4 3 4 3 3 2 5 2 3 .10 0 67.70 +19092025382710 3 3 3 7 3 7 7 43 4 2 2 2 3 2 3 3 3 .00 0 67.70 +1909212539 12320271717101013137 9 7 12 6 6 4 4 5 7 .31 0 68.20 +1909222539 22313 3 3 0 3 7 7 59 9 5 2 2 0 2 3 3 3 .10 0 68.80 +1909232539 3 3 0 3 7 310 710 43 2 0 2 3 2 4 3 4 2 .00 0 66.60 +1909242539 4302723 733372710194 15 12 9 3 18 22 12 4 12 .73 0 67.50 +1909252539 5 7101717 3 7 313 77 3 4 6 6 2 3 2 5 4 .10 0 67.90 +1909262539 627 7 3 3 3 0 010 53 12 3 2 2 2 0 0 4 3 .10 0 67.40 +1909272539 7 710201733435350233 3 4 7 6 18 32 56 48 221.15 0 66.80 +1909282539 82743434333303740296 12 32 32 32 18 15 22 27 241.15 0 67.50 +1909292539 92327231710333333199 9 12 9 6 4 18 18 18 12 .73 0 67.70 +1909302539103037372720271730225 15 22 22 12 7 12 6 15 14 .00 0 68.10 +1910012539113340302310 0 713156 18 27 15 9 4 0 3 5 10 .63 7 68.80 +19100225391230 0 02027101023120 15 0 0 7 12 4 4 9 6 .31 8 68.40 +19100325391317131310 3 31310 82 6 5 5 4 2 2 5 4 4 .10 0 68.30 +19100425391410132717202017 7131 4 5 12 6 7 7 6 3 6 .31 0 68.10 +1910052539151313102017171730137 5 5 4 7 6 6 6 15 7 .31 0 67.80 +191006253916132017131010 0 3 86 5 7 6 5 4 4 0 2 4 .10 0 67.30 +191007253917 7 710 717232323117 3 3 4 3 6 9 9 9 6 .31 0 67.60 +191008253918171313 7 7 71713 94 6 5 5 3 3 3 6 5 4 .21 0 67.00 +1910092539191723203317171013150 6 9 7 18 6 6 4 5 8 .42 0 67.90 +1910102539201343402013271317186 5 32 27 7 5 12 5 6 12 .73 0 67.30 +191011253921 710232017302317147 3 4 9 7 6 15 9 6 7 .42 0 68.30 +1910122539222020 713 7 3 7 3 80 7 7 3 5 3 2 3 2 4 .10 0 68.00 +191013253923 7 0 0 0 0 0 0 3 10 3 0 0 0 0 0 0 2 1 .00 0 66.90 +1910142539241017101010201710104 4 6 4 4 4 7 6 4 5 .21 0 65.80 +19101525392523 7 0 3 0 31310 59 9 3 0 2 0 2 5 4 3 .10 0 66.90 +19101625392613172010 7 32017107 5 6 7 4 3 2 7 6 5 .21 0 65.90 +19101725392720171717 7101010108 7 6 6 6 3 4 4 4 5 .21 0 65.60 +1910182540 11020171013101017107 4 7 6 4 5 4 4 6 5 .21 0 65.60 +1910192540 210 7 71313171310 90 4 3 3 5 5 6 5 4 4 .21 0 65.50 +1910202540 3 71310 7 7 71323 87 3 5 4 3 3 3 5 9 4 .21 0 64.40 +1910212540 427 7 717 7 01013 88 12 3 3 6 3 0 4 5 4 .21 0 63.40 +1910222540 5 3 3 7 7 31313 3 52 2 2 3 3 2 5 5 2 3 .10 0 64.90 +1910232540 6 3 0 0 0 3 7 3 3 19 2 0 0 0 2 3 2 2 1 .00 0 63.90 +1910242540 7 313133730434343225 2 5 5 22 15 32 32 32 181.05 0 64.30 +1910252540 84340534033332323288 32 27 56 27 18 18 9 9 241.26 0 67.90 +1910262540 93730304340434037300 22 15 15 32 27 32 27 22 241.26 0 67.80 +1910272540104033302017273727231 27 18 15 7 6 12 22 12 15 .84 0 68.00 +1910282540112327332017202727194 9 12 18 7 6 7 12 12 10 .63 0 68.50 +1910292540122727 7 0 3232013120 12 12 3 0 2 9 7 5 6 .31 0 68.20 +1910302540131013131023232323138 4 5 5 4 9 9 9 9 7 .31 0 68.80 +19103125401437 3 313 0 71017 90 22 2 2 5 5 3 4 6 6 .00 0 70.20 +1911012540151323 7 7 7 3 3 0 63 5 9 3 3 3 2 2 0 3 .10 5 69.60 +191102254016 3 0 0 0 0 0 310 16 2 0 0 0 0 0 2 4 1 .00 0 69.60 +19110325401710 3 0 0 0 0 0 7 20 4 2 0 0 0 0 0 3 1 .00 0 68.30 +1911042540181010171010 7 7 3 74 4 4 6 4 4 3 3 2 4 .10 0 69.60 +1911052540191310 3 710171717 94 5 4 2 3 4 6 6 6 4 .21 0 69.20 +1911062540201710 7 720131323110 6 4 3 3 7 5 5 9 5 .21 0 68.10 +1911072540212017 710 0 7 3 7 71 7 6 3 4 0 3 2 3 4 .10 0 68.50 +191108254022 7 0 310 7 7 710 51 3 0 2 4 3 3 3 4 3 .00 0 68.90 +1911092540232317 0 3 7 7 317 77 9 6 0 2 3 3 2 6 4 .10 0 68.30 +19111025402413 31310 3 0 0 3 45 5 2 5 4 2 0 0 2 2 .00 0 69.40 +191111254025 313172720201723140 2 5 6 12 7 7 6 9 7 .31 0 68.10 +19111225402620 3 7 71013 3 0 63 7 2 3 3 4 5 2 0 3 .10 0 69.30 +191113254027 0 0 0 0 0 0 713 20 0 0 0 0 0 0 3 5 1 .00 0 69.60 +1911142541 12310 3 7 7 3 3 3 59 9 4 2 3 3 2 2 2 3 .10 0 68.40 +1911152541 2 3 3 0 7 01017 7 47 2 2 0 3 0 4 6 3 2 .00 0 68.50 +1911162541 31720 3 713172320120 6 7 2 3 5 6 9 7 6 .31 0 68.20 +1911172541 41310 7 0 3 31327 76 5 4 3 0 2 2 5 12 4 .10 0 68.50 +1911182541 5 0 0 0 0 3 0 3 3 9 0 0 0 0 2 0 2 2 1 .00 0 68.80 +1911192541 6 013 3 0 0 710 0 33 0 5 2 0 0 3 4 0 2 .00 0 67.60 +1911202541 7 010 0 0 0 0 010 20 0 4 0 0 0 0 0 4 1 .00 0 68.50 +1911212541 81717131320303037177 6 6 5 5 7 15 15 22 10 .63 0 69.10 +1911222541 93720232027303023210 22 7 9 7 12 15 15 9 12 .73 0 67.90 +1911232541102723132727232720187 12 9 5 12 12 9 12 7 10 .52 0 68.50 +1911242541113330271727271327201 18 15 12 6 12 12 5 12 12 .73 0 68.80 +19112525411220 71013 310 720 90 7 3 4 5 2 4 3 7 4 .21 0 67.70 +1911262541132020 0 0 0 3 3 3 49 7 7 0 0 0 2 2 2 2 .00 0 68.60 +191127254114 3 71010 71713 7 74 2 3 4 4 3 6 5 3 4 .10 0 69.60 +19112825411513 3 3 3 71020 7 66 5 2 2 2 3 4 7 3 4 .10 0 68.30 +191129254116 710 7 7 3101730 91 3 4 3 3 2 4 6 15 5 .21 0 67.90 +19113025411713 7 3 3 7 71020 70 5 3 2 2 3 3 4 7 4 .00 0 68.50 +19120125411810 7 0 0 7 71317 61 4 3 0 0 3 3 5 6 3 .10 0 69.20 +191202254119 310 7 0 0 0 0 3 23 2 4 3 0 0 0 0 2 1 .00 0 68.40 +191203254120 3 3 0 3 0 3 3 7 22 2 2 0 2 0 2 2 3 2 .00 0 67.90 +1912042541211017 7 3 7 010 3 57 4 6 3 2 3 0 4 2 3 .10 0 67.60 +191205254122 3 0 0 7 7 7 3 3 30 2 0 0 3 3 3 2 2 2 .00 0 68.60 191206254123 313 7 3 7 7 3 7 50 2 5 3 2 3 3 2 3 30.10 0 68.30 -191207254124 7 0 0 7 3 3 3 7 30 3 0 0 3 2 2 2 3 20.00 0 68.20 -191208254125 3 3 3 0 3 31013 38 2 2 2 0 2 2 4 5 20.00 0 69.40 -1912092541262710 0 0 3 3 317 63 12 4 0 0 2 2 2 6 40.10 0 68.60 -191210254127 7201010 0 3 710 67 3 7 4 4 0 2 3 4 30.10 0 68.40 -1912112542 12723 3 7 717 717108 12 9 2 3 3 6 3 6 60.21 0 68.60 -1912122542 210 31310 3 0 317 59 4 2 5 4 2 0 2 6 30.10 0 68.30 -1912132542 3102013 3 0 0 7 3 56 4 7 5 2 0 0 3 2 30.10 0 66.80 -1912142542 4 3 0 3 3 3 3 013 28 2 0 2 2 2 2 0 5 20.00 0 68.10 -1912152542 523201010 3 3 723 99 9 7 4 4 2 2 3 9 50.21 0 68.80 -1912162542 6 7 0 7 310 7 7 0 41 3 0 3 2 4 3 3 0 20.00 0 67.70 -1912172542 7 0 710 3 0 3 0 3 26 0 3 4 2 0 2 0 2 20.00 0 68.20 -1912182542 81013173037372713184 4 5 6 15 22 22 12 5 110.73 0 68.00 -1912192542 933403727202013 7197 18 27 22 12 7 7 5 3 130.73 0 67.70 -191220254210201010 317201013103 7 4 4 2 6 7 4 5 50.21 0 67.70 -19122125421120 31313 7 31710 86 7 2 5 5 3 2 6 4 40.10 0 68.40 -19122225421213 317 0 3 3 713 59 5 2 6 0 2 2 3 5 30.10 0 68.70 -191223254213 013 31310 7 0 3 49 0 5 2 5 4 3 0 2 30.00 0 70.20 -19122425421417 0 3 3 0 0 0 0 23 6 0 2 2 0 0 0 0 10.00 13 70.30 -191225254215 3 3 3 7 3101717 63 2 2 2 3 2 4 6 6 30.10 16 69.80 -19122625421623 7 0 7 3 7 713 67 9 3 0 3 2 3 3 5 40.10 7 69.70 -19122725421713 7 7 7 0 3 3 0 40 5 3 3 3 0 2 2 0 20.00 0 70.10 -191228254218 7 3 0 0 0 3 3 3 19 3 2 0 0 0 2 2 2 10.00 0 69.80 -191229254219 0 0 3 3 0 0 3 7 16 0 0 2 2 0 0 2 3 10.00 0 69.60 -191230254220 3 0 3 3 3 3 3 7 25 2 0 2 2 2 2 2 3 20.00 0 68.60 +191207254124 7 0 0 7 3 3 3 7 30 3 0 0 3 2 2 2 3 20.00 0 68.20 +191208254125 3 3 3 0 3 31013 38 2 2 2 0 2 2 4 5 20.00 0 69.40 +1912092541262710 0 0 3 3 317 63 12 4 0 0 2 2 2 6 40.10 0 68.60 +191210254127 7201010 0 3 710 67 3 7 4 4 0 2 3 4 30.10 0 68.40 +1912112542 12723 3 7 717 717108 12 9 2 3 3 6 3 6 60.21 0 68.60 +1912122542 210 31310 3 0 317 59 4 2 5 4 2 0 2 6 30.10 0 68.30 +1912132542 3102013 3 0 0 7 3 56 4 7 5 2 0 0 3 2 30.10 0 66.80 +1912142542 4 3 0 3 3 3 3 013 28 2 0 2 2 2 2 0 5 20.00 0 68.10 +1912152542 523201010 3 3 723 99 9 7 4 4 2 2 3 9 50.21 0 68.80 +1912162542 6 7 0 7 310 7 7 0 41 3 0 3 2 4 3 3 0 20.00 0 67.70 +1912172542 7 0 710 3 0 3 0 3 26 0 3 4 2 0 2 0 2 20.00 0 68.20 +1912182542 81013173037372713184 4 5 6 15 22 22 12 5 110.73 0 68.00 +1912192542 933403727202013 7197 18 27 22 12 7 7 5 3 130.73 0 67.70 +191220254210201010 317201013103 7 4 4 2 6 7 4 5 50.21 0 67.70 +19122125421120 31313 7 31710 86 7 2 5 5 3 2 6 4 40.10 0 68.40 +19122225421213 317 0 3 3 713 59 5 2 6 0 2 2 3 5 30.10 0 68.70 +191223254213 013 31310 7 0 3 49 0 5 2 5 4 3 0 2 30.00 0 70.20 +19122425421417 0 3 3 0 0 0 0 23 6 0 2 2 0 0 0 0 10.00 13 70.30 +191225254215 3 3 3 7 3101717 63 2 2 2 3 2 4 6 6 30.10 16 69.80 +19122625421623 7 0 7 3 7 713 67 9 3 0 3 2 3 3 5 40.10 7 69.70 +19122725421713 7 7 7 0 3 3 0 40 5 3 3 3 0 2 2 0 20.00 0 70.10 +191228254218 7 3 0 0 0 3 3 3 19 3 2 0 0 0 2 2 2 10.00 0 69.80 +191229254219 0 0 3 3 0 0 3 7 16 0 0 2 2 0 0 2 3 10.00 0 69.60 +191230254220 3 0 3 3 3 3 3 7 25 2 0 2 2 2 2 2 3 20.00 0 68.60 191231254221 713 3 7 7 713 3 18 3 5 2 3 3 3 5 2 30.10 0 68.20 diff --git a/RMextract/pyiriplas/kp2020.txt b/RMextract/pyiriplas/kp2020.txt index 027c967..d30773d 100644 --- a/RMextract/pyiriplas/kp2020.txt +++ b/RMextract/pyiriplas/kp2020.txt @@ -1,181 +1,181 @@ -200101254222 0 0 0 7 7131010 47 0 0 0 3 3 5 4 4 20.00 5 69.40 -200102254223 0 0 3 7 3 71013 43 0 0 2 3 2 3 4 5 20.00 8 69.50 -2001032542241010272310 7 313103 4 4 12 9 4 3 2 5 50.21 10 68.90 -20010425422513 7 71010202320110 5 3 3 4 4 7 9 7 50.21 9 69.80 -2001052542261313171020233323152 5 5 6 4 7 9 18 9 80.42 9 69.40 -200106254227333017 7 0 72717138 18 15 6 3 0 3 12 6 80.42 8 68.10 -2001072543 11017 7 3 7101323 90 4 6 3 2 3 4 5 9 40.21 0 69.30 -2001082543 21010 3 717271723114 4 4 2 3 6 12 6 9 60.31 0 71.20 -2001092543 32730372320272017201 12 15 22 9 7 12 7 6 110.63 10 71.90 -2001102543 41310272317171010127 5 4 12 9 6 6 4 4 60.31 0 70.40 -2001112543 520202013 313 710106 7 7 7 5 2 5 3 4 50.21 0 71.00 -2001122543 61717 7 7 7 0 3 3 61 6 6 3 3 3 0 2 2 30.10 0 69.50 -2001132543 7 7 7 7 3 3 0 710 44 3 3 3 2 2 0 3 4 20.00 0 69.10 -2001142543 8 7 3 3 7 0 3 0 3 26 3 2 2 3 0 2 0 2 20.00 0 69.50 -2001152543 9 7 0 3 7 3 3 3 7 33 3 3 2 3 2 2 2 3 20.00 0 69.28 -200116254310 7231713 7 7 3 7 84 3 9 6 5 3 3 2 3 40.10 0 69.40 -20011725431110 3 7 0 31310 3 49 4 2 3 0 2 5 4 2 30.00 0 67.90 -200118254312131310 0 3 3 3 7 52 5 5 4 0 2 2 2 3 30.10 0 69.00 -200119254313 310 0 3 0 3 3 3 25 2 4 0 2 0 2 2 2 20.00 0 69.50 -200120254314 3 3 3 0 0 0 3 3 15 2 2 2 0 0 0 2 2 10.00 0 69.00 -200121254315 0 0 71313232320 99 0 0 3 5 5 9 9 7 50.21 0 68.30 -20012225431617231310 7 31330116 6 9 5 4 3 2 5 15 60.31 0 69.60 -2001232543171723 3 3 0 31310 72 6 9 2 2 0 2 5 4 40.10 0 68.60 -20012425431810 0 0 0 3 3 3 3 22 4 0 0 0 2 2 2 2 20.00 7 68.80 -200125254319 323 7 3 3 0 3 3 45 2 9 3 2 2 0 2 2 30.00 7 70.40 -20012625432013 7 0 0 71710 3 57 5 3 0 0 3 6 4 2 30.10 14 72.40 -200127254321 3 710 3 3 0 3 0 29 2 3 4 2 2 0 2 0 20.00 9 70.70 -200128254322101310 3 0 31030 79 4 5 4 2 0 2 4 15 40.21 9 72.00 -20012925432333331713 0131320142 18 18 6 5 0 5 5 7 80.42 8 72.00 -2001302543242027231723303327200 7 12 9 6 9 15 18 12 110.63 8 71.90 -2001312543252333172310 3 020129 9 18 6 9 4 2 2 7 70.00 9 71.70 -20020125432610 3 7 720171723104 4 2 3 3 7 6 6 9 50.21 7 70.40 -20020225432723 3131320171720126 9 2 5 5 7 6 6 7 50.00 0 71.32 -2002032544 1172010 3 3 710 3 73 6 7 4 2 2 3 4 2 40.10 0 70.00 -2002042544 217171010 7101727115 6 6 4 4 3 4 6 12 60.31 0 68.30 -2002052544 31320131710 7 7 3 90 5 7 5 6 4 3 3 2 40.21 0 68.60 -2002062544 4 727402727234030221 3 12 27 12 12 9 27 15 150.84 0 69.30 -2002072544 53030301327272733217 15 15 15 5 12 12 12 18 130.73 0 68.90 -2002082544 62713101017131013113 12 5 4 4 6 5 4 5 60.31 0 70.00 -2002092544 730171310 7171720131 15 6 5 4 3 6 6 7 60.31 0 68.80 -2002102544 817131713 7 3 713 90 6 5 6 5 3 2 3 5 40.21 0 68.30 -2002112544 9273013 3 0 0 713 93 12 15 5 2 0 0 3 5 50.21 0 69.30 -20021225441017171320 3 0 010 80 6 6 5 7 2 0 0 4 40.10 0 69.80 -200213254411 7 0 3 7 0 3 717 44 3 0 2 3 0 2 3 6 20.00 0 69.40 -2002142544121710 3 0 0 0 0 7 37 6 4 2 0 0 0 0 3 20.00 0 69.50 -200215254413 7 0 02023101010 80 3 0 0 7 9 4 4 4 40.10 0 68.80 -20021625441420 7 0 7 3 0 3 3 43 7 3 0 3 2 0 2 2 20.00 0 68.80 -20021725441513 713 710132730120 5 3 5 3 4 5 12 15 60.31 0 69.00 -2002182544161027372330303327217 4 12 22 9 15 15 18 12 130.84 0 69.40 -2002192544172340333317171017190 9 27 18 18 6 6 4 6 120.73 0 69.40 -2002202544182323171017102327150 9 9 6 4 6 4 9 12 70.42 0 69.20 -2002212544193727273317301733221 22 12 12 18 6 15 6 18 140.84 0 69.60 -2002222544202720131713202720157 12 7 5 6 5 7 12 7 80.42 0 70.70 -200223254421 7 3 7 7 3102323 83 3 2 3 3 2 4 9 9 40.21 0 68.80 -2002242544222017 0 3 3 0 713 63 7 6 0 2 2 0 3 5 30.10 0 68.70 -20022525442317 3 3 0 7 0 0 3 33 6 2 2 0 3 0 0 2 20.00 0 69.10 -200226254424 7 3 7 0 7 72013 64 3 2 3 0 3 3 7 5 30.10 0 68.70 -20022725442517 0 310 7 3 7 7 54 6 0 2 4 3 2 3 3 30.10 0 69.60 -200228254426171710171710 723118 6 6 4 6 6 4 3 9 60.21 0 69.30 -2002292544272013202320272023166 7 5 7 9 7 12 7 9 80.42 0 68.80 -2003012545 133131323 7 3 313108 18 5 5 9 3 2 2 5 60.31 0 68.10 -2003022545 217 7 0102010 310 77 6 3 0 4 7 4 2 4 40.10 0 68.10 -2003032545 3201010132020 723123 7 4 4 5 7 7 3 9 60.31 0 68.80 -2003042545 4 013101017301713110 0 5 4 4 6 15 6 5 60.31 0 68.70 -2003052545 51010101013 7 7 0 67 4 4 4 4 5 3 3 0 30.10 0 68.30 -2003062545 610 313201713 0 0 76 4 2 5 7 6 5 0 0 40.10 0 68.90 -2003072545 7 310131020 7 3 3 69 2 4 5 4 7 3 2 2 40.10 0 68.80 -2003082545 8131713 3 3131717 96 5 6 5 2 2 5 6 6 50.21 10 69.20 -2003092545 9 320171010131710100 2 7 6 4 4 5 6 4 50.21 9 69.80 -20031025451020 313 7 7 7 013 70 7 2 5 3 3 3 0 5 40.10 0 69.80 -20031125451117 3 3 7 7 3 0 3 43 6 2 2 3 3 2 0 2 20.00 0 69.60 -2003122545121013171013172710117 4 5 6 4 5 6 12 4 60.31 0 69.10 -2003132545132027202010171010134 7 12 7 7 4 6 4 4 60.31 0 67.90 -200314254514 3 0 3 7 7 310 3 36 2 0 2 3 3 2 4 2 20.00 0 67.40 -200315254515 3 3 31710 71717 77 2 2 2 6 4 3 6 6 40.10 0 69.50 -20031625451620 3 713131017 7 90 7 2 3 5 5 4 6 3 40.21 0 69.10 -20031725451720 3131713171017110 7 2 5 6 5 6 4 6 50.21 0 70.90 -200318254518 3 7 7 317233017107 2 3 3 2 6 9 15 6 60.31 0 71.40 -200319254519432323202317 717173 32 9 9 7 9 6 3 6 100.63 0 71.50 -200320254520271320 0 7202027134 12 5 7 0 3 7 7 12 70.31 0 71.10 -2003212545211723302013171017147 6 9 15 7 5 6 4 6 70.42 0 70.30 -2003222545222323131017172017140 9 9 5 4 6 6 7 6 60.31 0 69.80 -2003232545232333172723173323196 9 18 6 12 9 6 18 9 110.63 0 69.90 -200324254524271010 7 0 0 0 3 57 12 4 4 3 0 0 0 2 30.10 0 70.80 -20032525452517 0 3 710 0 320 60 6 0 2 3 4 0 2 7 30.10 0 70.90 -20032625452610 3 7101017 727 91 4 2 3 4 4 6 3 12 50.21 0 69.90 -200327254527201310 7102017 3100 7 5 4 3 4 7 6 2 50.21 0 69.20 -2003282546 1 0 7131713 31323 89 0 3 5 6 5 2 5 9 40.21 0 69.00 -2003292546 210 3202030231710133 4 2 7 7 15 9 6 4 70.31 0 68.60 -2003302546 31320131013303337169 5 7 5 4 5 15 18 22 100.63 0 69.10 -2003312546 43340372027202030227 18 27 22 7 12 7 7 15 140.00 0 69.80 -2004012546 5202713 7 0101020107 7 12 5 3 0 4 4 7 50.00 9 69.20 -2004022546 61323171310171317123 5 9 6 5 4 6 5 6 50.00 8 69.37 -2004032546 72323 7 7 7132037137 9 9 3 3 3 5 7 22 80.42 9 70.00 -2004042546 820 3 313 3 71317 79 7 2 2 5 2 3 5 6 40.10 10 70.20 -2004052546 92013 713 7 7 313 83 7 5 3 5 3 3 2 5 40.10 0 71.30 -2004062546101010 7 310 0 0 3 43 4 4 3 2 4 0 0 2 20.00 0 70.10 -200407254611 3 0 0 3 0 32020 49 2 0 0 2 0 2 7 7 20.00 0 70.10 -2004082546121727202330331733200 6 12 7 9 15 18 6 18 110.73 0 70.70 -20040925461317 3 7 713 31313 76 6 2 3 3 5 2 5 5 40.10 0 70.60 -200410254614 0 71017102010 7 81 0 3 4 6 4 7 4 3 40.10 0 69.50 -200411254615101010 720272023127 4 4 4 3 7 12 7 9 60.31 0 70.90 -2004122546161017171023132313126 4 6 6 4 9 5 9 5 60.31 0 71.10 -2004132546171017 71017131317104 4 6 3 4 6 5 5 6 50.21 0 70.70 -20041425461823332717 7 3 323136 9 18 12 6 3 2 2 9 80.42 0 69.40 -2004152546193023171010 7 713117 15 9 6 4 4 3 3 5 60.31 0 68.90 -200416254620201010 3 31310 3 72 7 4 4 2 2 5 4 2 40.10 0 69.00 -20041725462110 31010 7 3 313 59 4 2 4 4 3 2 2 5 30.10 0 68.40 -20041825462213171310 7 3 0 3 66 5 6 5 4 3 2 0 2 30.10 0 70.40 -200419254623 0 0 3 0 7 3 0 3 16 0 0 2 0 3 2 0 2 10.00 0 69.20 -200420254624203033474323 3 7206 7 15 18 39 32 9 2 3 160.94 0 68.90 -2004212546251317101723332023156 5 6 4 6 9 18 7 9 80.42 0 69.80 -2004222546263030131013101313132 15 15 5 4 5 4 5 5 70.42 0 71.40 -200423254627 310 310 3 0 320 52 2 4 2 4 2 0 2 7 30.10 0 69.50 -2004242547 123 7 71010202030127 9 3 3 4 4 7 7 15 60.31 0 70.50 -2004252547 2202017 3 710 0 0 77 7 7 6 2 3 4 0 0 40.10 5 69.80 -2004262547 3 720 71317172023124 3 7 3 5 6 6 7 9 60.31 10 70.10 -2004272547 4271710 713201710121 12 6 4 3 5 7 6 4 60.31 20 69.90 -2004282547 52713 3171013 713103 12 5 2 6 4 5 3 5 50.21 7 69.90 -2004292547 613 3 0 3 7 3 7 7 43 5 2 0 2 3 2 3 3 20.00 16 71.00 -2004302547 713 3 3 3 0 0 0 7 29 5 2 2 2 2 2 2 3 20.00 14 70.90 -2005012547 8 31023171710 3 7 90 2 4 9 6 6 4 2 3 40.21 0 71.30 -2005022547 9 31717131010 710 87 2 6 6 5 4 4 3 4 40.10 0 70.30 -200503254710 713 7 3 3 31727 80 3 5 3 2 2 2 6 12 40.21 0 69.80 -2005042547111713 7131710 313 93 6 5 3 5 6 4 2 5 40.21 0 70.50 -2005052547121317131310171320116 5 6 5 5 4 6 5 7 50.21 0 70.50 -2005062547133023 3 3 7 3 3 3 75 15 9 2 2 3 2 2 2 50.21 0 71.10 -200507254714 710171010 3 3 7 67 3 4 6 4 4 2 2 3 40.10 0 70.00 -20050825471513 3 7 710 0 010 50 5 2 3 3 4 0 0 4 30.00 0 69.20 -20050925471610 0 0 3 3 3 3 0 22 4 0 0 2 2 2 2 0 20.00 0 72.40 -200510254717 3 0 3 3 3101323 58 2 0 2 2 2 4 5 9 30.10 0 69.30 -20051125471813201713 3 3 3 7 79 5 7 6 5 2 2 2 3 40.10 0 67.50 -200512254719 7 7 7 3 7 7 723 68 3 3 3 2 3 3 3 9 40.10 0 70.30 -20051325472013 3 0 7 710 713 60 5 2 0 3 3 4 3 5 30.10 0 70.20 -200514254721 7 7 3 3 3 3 3 3 32 3 3 2 2 2 2 2 2 20.00 0 68.70 -200515254722 7101013 3 7 0 3 53 3 4 4 5 2 3 0 2 30.10 0 69.40 -200516254723 3 3 3 71710 3 7 53 2 2 2 3 6 4 2 3 30.10 0 71.00 -200517254724 3 3 010 3 7 310 39 2 2 0 4 2 3 2 4 20.00 0 71.20 -200518254725 3 0 0 3 72017 7 57 2 0 0 2 3 7 6 3 30.10 0 71.80 -2005192547261013172017 3 713100 4 5 6 7 6 2 3 5 50.21 0 70.30 -20052025472713 3 0 3 3 3 7 7 39 5 2 0 2 2 2 3 3 20.00 0 71.30 -2005212548 1132010 7 7131320103 5 7 4 3 3 5 5 7 50.21 0 71.90 -2005222548 2171310 3202023 7113 6 5 4 2 7 7 9 3 50.21 0 72.60 -2005232548 3131710 3 3 7 3 0 56 5 6 4 2 2 3 2 0 30.10 0 70.90 -2005242548 410 3 0 3202317 7 83 4 2 0 2 7 9 6 3 40.10 0 70.60 -2005252548 5201013 717 71020104 7 4 5 3 6 3 4 7 50.21 0 72.10 -2005262548 613 7 7 7 3 3 717 64 5 3 3 3 2 2 3 6 30.10 0 71.60 -2005272548 7 7 3 31010 713 3 56 3 2 2 4 4 3 5 2 30.10 0 69.90 -2005282548 8 710 7 310 7 3 7 54 3 4 3 2 4 3 2 3 30.10 0 69.30 -2005292548 9 7 3 3 3 7 0 317 43 3 2 2 2 3 0 2 6 20.00 0 71.60 -2005302548102027333330233030226 7 12 18 18 15 9 15 15 140.84 0 71.90 -2005312548111310 3 7 710 320 73 5 4 2 3 3 4 2 7 40.00 0 72.80 -200601254812 713 710 3102727104 3 5 3 4 2 4 12 12 60.31 3 71.20 -2006022548131730131310 72013123 6 15 5 5 4 3 7 5 60.31 0 72.40 -2006032548141010 0 710 7 3 3 50 4 4 0 3 4 3 2 2 30.00 7 72.00 -200604254815 7 313 3 3101717 73 3 2 5 2 2 4 6 6 40.10 7 72.10 -200605254816 3 3 31313 7 7 3 52 2 2 2 5 5 3 3 2 30.10 8 73.20 -200606254817 7 7 31013 3 3 3 49 3 3 2 4 5 2 2 2 30.10 9 73.80 -200607254818 713 7 710233723127 3 5 3 3 4 9 22 9 70.42 10 73.80 -2006082548191720 7 3 710 7 3 74 6 7 3 2 3 4 3 2 40.10 10 73.20 -200609254820 7 7 0 3 7102027 81 3 3 0 2 3 4 7 12 40.10 9 74.60 -2006102548211723232710101013133 6 9 9 12 4 4 4 5 70.31 7 73.20 -2006112548221713 7 3 7 3 3 0 53 6 5 3 2 3 2 2 0 30.10 7 73.70 -200612254823 71010 7 7 7 3 3 54 3 4 4 3 3 3 2 2 30.10 7 72.70 -200613254824 0 7 7 310 3 3 3 36 0 3 3 2 4 2 2 2 20.00 7 71.60 -200614254825 3 3 3 3 3 3 7 7 32 2 2 2 2 2 2 3 3 20.00 7 72.40 -200615254826 0 7101710 7 7 3 61 0 3 4 6 4 3 3 2 30.10 5 72.70 -200616254827 7101710 7172317108 3 4 6 4 3 6 9 6 50.21 0 71.50 -2006172549 117 7 7101710 0 0 68 6 3 3 4 6 4 0 0 30.10 0 71.00 -2006182549 2 3171010131010 7 80 2 6 4 4 5 4 4 3 40.10 0 70.20 -2006192549 3 710 713 7101720 91 3 4 3 5 3 4 6 7 40.21 0 71.10 -2006202549 423202010 3 7 313 99 9 7 7 4 2 3 2 5 50.21 0 70.00 -2006212549 5 7 7 31010 7 7 3 54 3 3 2 4 4 3 3 2 30.10 0 69.90 -2006222549 6 3 3 7 7 3 3 313 42 2 2 3 3 2 2 2 5 30.00 0 69.90 -2006232549 7 7 313 3 7 3 313 52 3 2 5 2 3 2 2 5 30.10 0 69.30 -2006242549 813131010 7 7 3 7 70 5 5 4 4 3 3 2 3 40.10 0 69.10 -2006252549 9 710 3 7 3 7 013 50 3 4 2 3 2 3 0 5 30.00 0 71.20 -20062625491017 3 3 710102330103 6 2 2 3 4 4 9 15 60.31 4 70.00 -2006272549112713132323 3 320125 12 5 5 9 9 2 2 7 60.31 2 71.20 -2006282549121313 3 7 0 3 310 16 5 5 2 3 0 2 2 4 30.10 0 71.50 -200629254913 7 7 710 7 7 710 62 3 3 3 4 3 3 3 4 30.00 0 70.90 +200101254222 0 0 0 7 7131010 47 0 0 0 3 3 5 4 4 20.00 5 69.40 +200102254223 0 0 3 7 3 71013 43 0 0 2 3 2 3 4 5 20.00 8 69.50 +2001032542241010272310 7 313103 4 4 12 9 4 3 2 5 50.21 10 68.90 +20010425422513 7 71010202320110 5 3 3 4 4 7 9 7 50.21 9 69.80 +2001052542261313171020233323152 5 5 6 4 7 9 18 9 80.42 9 69.40 +200106254227333017 7 0 72717138 18 15 6 3 0 3 12 6 80.42 8 68.10 +2001072543 11017 7 3 7101323 90 4 6 3 2 3 4 5 9 40.21 0 69.30 +2001082543 21010 3 717271723114 4 4 2 3 6 12 6 9 60.31 0 71.20 +2001092543 32730372320272017201 12 15 22 9 7 12 7 6 110.63 10 71.90 +2001102543 41310272317171010127 5 4 12 9 6 6 4 4 60.31 0 70.40 +2001112543 520202013 313 710106 7 7 7 5 2 5 3 4 50.21 0 71.00 +2001122543 61717 7 7 7 0 3 3 61 6 6 3 3 3 0 2 2 30.10 0 69.50 +2001132543 7 7 7 7 3 3 0 710 44 3 3 3 2 2 0 3 4 20.00 0 69.10 +2001142543 8 7 3 3 7 0 3 0 3 26 3 2 2 3 0 2 0 2 20.00 0 69.50 +2001152543 9 7 0 3 7 3 3 3 7 33 3 3 2 3 2 2 2 3 20.00 0 69.28 +200116254310 7231713 7 7 3 7 84 3 9 6 5 3 3 2 3 40.10 0 69.40 +20011725431110 3 7 0 31310 3 49 4 2 3 0 2 5 4 2 30.00 0 67.90 +200118254312131310 0 3 3 3 7 52 5 5 4 0 2 2 2 3 30.10 0 69.00 +200119254313 310 0 3 0 3 3 3 25 2 4 0 2 0 2 2 2 20.00 0 69.50 +200120254314 3 3 3 0 0 0 3 3 15 2 2 2 0 0 0 2 2 10.00 0 69.00 +200121254315 0 0 71313232320 99 0 0 3 5 5 9 9 7 50.21 0 68.30 +20012225431617231310 7 31330116 6 9 5 4 3 2 5 15 60.31 0 69.60 +2001232543171723 3 3 0 31310 72 6 9 2 2 0 2 5 4 40.10 0 68.60 +20012425431810 0 0 0 3 3 3 3 22 4 0 0 0 2 2 2 2 20.00 7 68.80 +200125254319 323 7 3 3 0 3 3 45 2 9 3 2 2 0 2 2 30.00 7 70.40 +20012625432013 7 0 0 71710 3 57 5 3 0 0 3 6 4 2 30.10 14 72.40 +200127254321 3 710 3 3 0 3 0 29 2 3 4 2 2 0 2 0 20.00 9 70.70 +200128254322101310 3 0 31030 79 4 5 4 2 0 2 4 15 40.21 9 72.00 +20012925432333331713 0131320142 18 18 6 5 0 5 5 7 80.42 8 72.00 +2001302543242027231723303327200 7 12 9 6 9 15 18 12 110.63 8 71.90 +2001312543252333172310 3 020129 9 18 6 9 4 2 2 7 70.00 9 71.70 +20020125432610 3 7 720171723104 4 2 3 3 7 6 6 9 50.21 7 70.40 +20020225432723 3131320171720126 9 2 5 5 7 6 6 7 50.00 0 71.32 +2002032544 1172010 3 3 710 3 73 6 7 4 2 2 3 4 2 40.10 0 70.00 +2002042544 217171010 7101727115 6 6 4 4 3 4 6 12 60.31 0 68.30 +2002052544 31320131710 7 7 3 90 5 7 5 6 4 3 3 2 40.21 0 68.60 +2002062544 4 727402727234030221 3 12 27 12 12 9 27 15 150.84 0 69.30 +2002072544 53030301327272733217 15 15 15 5 12 12 12 18 130.73 0 68.90 +2002082544 62713101017131013113 12 5 4 4 6 5 4 5 60.31 0 70.00 +2002092544 730171310 7171720131 15 6 5 4 3 6 6 7 60.31 0 68.80 +2002102544 817131713 7 3 713 90 6 5 6 5 3 2 3 5 40.21 0 68.30 +2002112544 9273013 3 0 0 713 93 12 15 5 2 0 0 3 5 50.21 0 69.30 +20021225441017171320 3 0 010 80 6 6 5 7 2 0 0 4 40.10 0 69.80 +200213254411 7 0 3 7 0 3 717 44 3 0 2 3 0 2 3 6 20.00 0 69.40 +2002142544121710 3 0 0 0 0 7 37 6 4 2 0 0 0 0 3 20.00 0 69.50 +200215254413 7 0 02023101010 80 3 0 0 7 9 4 4 4 40.10 0 68.80 +20021625441420 7 0 7 3 0 3 3 43 7 3 0 3 2 0 2 2 20.00 0 68.80 +20021725441513 713 710132730120 5 3 5 3 4 5 12 15 60.31 0 69.00 +2002182544161027372330303327217 4 12 22 9 15 15 18 12 130.84 0 69.40 +2002192544172340333317171017190 9 27 18 18 6 6 4 6 120.73 0 69.40 +2002202544182323171017102327150 9 9 6 4 6 4 9 12 70.42 0 69.20 +2002212544193727273317301733221 22 12 12 18 6 15 6 18 140.84 0 69.60 +2002222544202720131713202720157 12 7 5 6 5 7 12 7 80.42 0 70.70 +200223254421 7 3 7 7 3102323 83 3 2 3 3 2 4 9 9 40.21 0 68.80 +2002242544222017 0 3 3 0 713 63 7 6 0 2 2 0 3 5 30.10 0 68.70 +20022525442317 3 3 0 7 0 0 3 33 6 2 2 0 3 0 0 2 20.00 0 69.10 +200226254424 7 3 7 0 7 72013 64 3 2 3 0 3 3 7 5 30.10 0 68.70 +20022725442517 0 310 7 3 7 7 54 6 0 2 4 3 2 3 3 30.10 0 69.60 +200228254426171710171710 723118 6 6 4 6 6 4 3 9 60.21 0 69.30 +2002292544272013202320272023166 7 5 7 9 7 12 7 9 80.42 0 68.80 +2003012545 133131323 7 3 313108 18 5 5 9 3 2 2 5 60.31 0 68.10 +2003022545 217 7 0102010 310 77 6 3 0 4 7 4 2 4 40.10 0 68.10 +2003032545 3201010132020 723123 7 4 4 5 7 7 3 9 60.31 0 68.80 +2003042545 4 013101017301713110 0 5 4 4 6 15 6 5 60.31 0 68.70 +2003052545 51010101013 7 7 0 67 4 4 4 4 5 3 3 0 30.10 0 68.30 +2003062545 610 313201713 0 0 76 4 2 5 7 6 5 0 0 40.10 0 68.90 +2003072545 7 310131020 7 3 3 69 2 4 5 4 7 3 2 2 40.10 0 68.80 +2003082545 8131713 3 3131717 96 5 6 5 2 2 5 6 6 50.21 10 69.20 +2003092545 9 320171010131710100 2 7 6 4 4 5 6 4 50.21 9 69.80 +20031025451020 313 7 7 7 013 70 7 2 5 3 3 3 0 5 40.10 0 69.80 +20031125451117 3 3 7 7 3 0 3 43 6 2 2 3 3 2 0 2 20.00 0 69.60 +2003122545121013171013172710117 4 5 6 4 5 6 12 4 60.31 0 69.10 +2003132545132027202010171010134 7 12 7 7 4 6 4 4 60.31 0 67.90 +200314254514 3 0 3 7 7 310 3 36 2 0 2 3 3 2 4 2 20.00 0 67.40 +200315254515 3 3 31710 71717 77 2 2 2 6 4 3 6 6 40.10 0 69.50 +20031625451620 3 713131017 7 90 7 2 3 5 5 4 6 3 40.21 0 69.10 +20031725451720 3131713171017110 7 2 5 6 5 6 4 6 50.21 0 70.90 +200318254518 3 7 7 317233017107 2 3 3 2 6 9 15 6 60.31 0 71.40 +200319254519432323202317 717173 32 9 9 7 9 6 3 6 100.63 0 71.50 +200320254520271320 0 7202027134 12 5 7 0 3 7 7 12 70.31 0 71.10 +2003212545211723302013171017147 6 9 15 7 5 6 4 6 70.42 0 70.30 +2003222545222323131017172017140 9 9 5 4 6 6 7 6 60.31 0 69.80 +2003232545232333172723173323196 9 18 6 12 9 6 18 9 110.63 0 69.90 +200324254524271010 7 0 0 0 3 57 12 4 4 3 0 0 0 2 30.10 0 70.80 +20032525452517 0 3 710 0 320 60 6 0 2 3 4 0 2 7 30.10 0 70.90 +20032625452610 3 7101017 727 91 4 2 3 4 4 6 3 12 50.21 0 69.90 +200327254527201310 7102017 3100 7 5 4 3 4 7 6 2 50.21 0 69.20 +2003282546 1 0 7131713 31323 89 0 3 5 6 5 2 5 9 40.21 0 69.00 +2003292546 210 3202030231710133 4 2 7 7 15 9 6 4 70.31 0 68.60 +2003302546 31320131013303337169 5 7 5 4 5 15 18 22 100.63 0 69.10 +2003312546 43340372027202030227 18 27 22 7 12 7 7 15 140.00 0 69.80 +2004012546 5202713 7 0101020107 7 12 5 3 0 4 4 7 50.00 9 69.20 +2004022546 61323171310171317123 5 9 6 5 4 6 5 6 50.00 8 69.37 +2004032546 72323 7 7 7132037137 9 9 3 3 3 5 7 22 80.42 9 70.00 +2004042546 820 3 313 3 71317 79 7 2 2 5 2 3 5 6 40.10 10 70.20 +2004052546 92013 713 7 7 313 83 7 5 3 5 3 3 2 5 40.10 0 71.30 +2004062546101010 7 310 0 0 3 43 4 4 3 2 4 0 0 2 20.00 0 70.10 +200407254611 3 0 0 3 0 32020 49 2 0 0 2 0 2 7 7 20.00 0 70.10 +2004082546121727202330331733200 6 12 7 9 15 18 6 18 110.73 0 70.70 +20040925461317 3 7 713 31313 76 6 2 3 3 5 2 5 5 40.10 0 70.60 +200410254614 0 71017102010 7 81 0 3 4 6 4 7 4 3 40.10 0 69.50 +200411254615101010 720272023127 4 4 4 3 7 12 7 9 60.31 0 70.90 +2004122546161017171023132313126 4 6 6 4 9 5 9 5 60.31 0 71.10 +2004132546171017 71017131317104 4 6 3 4 6 5 5 6 50.21 0 70.70 +20041425461823332717 7 3 323136 9 18 12 6 3 2 2 9 80.42 0 69.40 +2004152546193023171010 7 713117 15 9 6 4 4 3 3 5 60.31 0 68.90 +200416254620201010 3 31310 3 72 7 4 4 2 2 5 4 2 40.10 0 69.00 +20041725462110 31010 7 3 313 59 4 2 4 4 3 2 2 5 30.10 0 68.40 +20041825462213171310 7 3 0 3 66 5 6 5 4 3 2 0 2 30.10 0 70.40 +200419254623 0 0 3 0 7 3 0 3 16 0 0 2 0 3 2 0 2 10.00 0 69.20 +200420254624203033474323 3 7206 7 15 18 39 32 9 2 3 160.94 0 68.90 +2004212546251317101723332023156 5 6 4 6 9 18 7 9 80.42 0 69.80 +2004222546263030131013101313132 15 15 5 4 5 4 5 5 70.42 0 71.40 +200423254627 310 310 3 0 320 52 2 4 2 4 2 0 2 7 30.10 0 69.50 +2004242547 123 7 71010202030127 9 3 3 4 4 7 7 15 60.31 0 70.50 +2004252547 2202017 3 710 0 0 77 7 7 6 2 3 4 0 0 40.10 5 69.80 +2004262547 3 720 71317172023124 3 7 3 5 6 6 7 9 60.31 10 70.10 +2004272547 4271710 713201710121 12 6 4 3 5 7 6 4 60.31 20 69.90 +2004282547 52713 3171013 713103 12 5 2 6 4 5 3 5 50.21 7 69.90 +2004292547 613 3 0 3 7 3 7 7 43 5 2 0 2 3 2 3 3 20.00 16 71.00 +2004302547 713 3 3 3 0 0 0 7 29 5 2 2 2 2 2 2 3 20.00 14 70.90 +2005012547 8 31023171710 3 7 90 2 4 9 6 6 4 2 3 40.21 0 71.30 +2005022547 9 31717131010 710 87 2 6 6 5 4 4 3 4 40.10 0 70.30 +200503254710 713 7 3 3 31727 80 3 5 3 2 2 2 6 12 40.21 0 69.80 +2005042547111713 7131710 313 93 6 5 3 5 6 4 2 5 40.21 0 70.50 +2005052547121317131310171320116 5 6 5 5 4 6 5 7 50.21 0 70.50 +2005062547133023 3 3 7 3 3 3 75 15 9 2 2 3 2 2 2 50.21 0 71.10 +200507254714 710171010 3 3 7 67 3 4 6 4 4 2 2 3 40.10 0 70.00 +20050825471513 3 7 710 0 010 50 5 2 3 3 4 0 0 4 30.00 0 69.20 +20050925471610 0 0 3 3 3 3 0 22 4 0 0 2 2 2 2 0 20.00 0 72.40 +200510254717 3 0 3 3 3101323 58 2 0 2 2 2 4 5 9 30.10 0 69.30 +20051125471813201713 3 3 3 7 79 5 7 6 5 2 2 2 3 40.10 0 67.50 +200512254719 7 7 7 3 7 7 723 68 3 3 3 2 3 3 3 9 40.10 0 70.30 +20051325472013 3 0 7 710 713 60 5 2 0 3 3 4 3 5 30.10 0 70.20 +200514254721 7 7 3 3 3 3 3 3 32 3 3 2 2 2 2 2 2 20.00 0 68.70 +200515254722 7101013 3 7 0 3 53 3 4 4 5 2 3 0 2 30.10 0 69.40 +200516254723 3 3 3 71710 3 7 53 2 2 2 3 6 4 2 3 30.10 0 71.00 +200517254724 3 3 010 3 7 310 39 2 2 0 4 2 3 2 4 20.00 0 71.20 +200518254725 3 0 0 3 72017 7 57 2 0 0 2 3 7 6 3 30.10 0 71.80 +2005192547261013172017 3 713100 4 5 6 7 6 2 3 5 50.21 0 70.30 +20052025472713 3 0 3 3 3 7 7 39 5 2 0 2 2 2 3 3 20.00 0 71.30 +2005212548 1132010 7 7131320103 5 7 4 3 3 5 5 7 50.21 0 71.90 +2005222548 2171310 3202023 7113 6 5 4 2 7 7 9 3 50.21 0 72.60 +2005232548 3131710 3 3 7 3 0 56 5 6 4 2 2 3 2 0 30.10 0 70.90 +2005242548 410 3 0 3202317 7 83 4 2 0 2 7 9 6 3 40.10 0 70.60 +2005252548 5201013 717 71020104 7 4 5 3 6 3 4 7 50.21 0 72.10 +2005262548 613 7 7 7 3 3 717 64 5 3 3 3 2 2 3 6 30.10 0 71.60 +2005272548 7 7 3 31010 713 3 56 3 2 2 4 4 3 5 2 30.10 0 69.90 +2005282548 8 710 7 310 7 3 7 54 3 4 3 2 4 3 2 3 30.10 0 69.30 +2005292548 9 7 3 3 3 7 0 317 43 3 2 2 2 3 0 2 6 20.00 0 71.60 +2005302548102027333330233030226 7 12 18 18 15 9 15 15 140.84 0 71.90 +2005312548111310 3 7 710 320 73 5 4 2 3 3 4 2 7 40.00 0 72.80 +200601254812 713 710 3102727104 3 5 3 4 2 4 12 12 60.31 3 71.20 +2006022548131730131310 72013123 6 15 5 5 4 3 7 5 60.31 0 72.40 +2006032548141010 0 710 7 3 3 50 4 4 0 3 4 3 2 2 30.00 7 72.00 +200604254815 7 313 3 3101717 73 3 2 5 2 2 4 6 6 40.10 7 72.10 +200605254816 3 3 31313 7 7 3 52 2 2 2 5 5 3 3 2 30.10 8 73.20 +200606254817 7 7 31013 3 3 3 49 3 3 2 4 5 2 2 2 30.10 9 73.80 +200607254818 713 7 710233723127 3 5 3 3 4 9 22 9 70.42 10 73.80 +2006082548191720 7 3 710 7 3 74 6 7 3 2 3 4 3 2 40.10 10 73.20 +200609254820 7 7 0 3 7102027 81 3 3 0 2 3 4 7 12 40.10 9 74.60 +2006102548211723232710101013133 6 9 9 12 4 4 4 5 70.31 7 73.20 +2006112548221713 7 3 7 3 3 0 53 6 5 3 2 3 2 2 0 30.10 7 73.70 +200612254823 71010 7 7 7 3 3 54 3 4 4 3 3 3 2 2 30.10 7 72.70 +200613254824 0 7 7 310 3 3 3 36 0 3 3 2 4 2 2 2 20.00 7 71.60 +200614254825 3 3 3 3 3 3 7 7 32 2 2 2 2 2 2 3 3 20.00 7 72.40 +200615254826 0 7101710 7 7 3 61 0 3 4 6 4 3 3 2 30.10 5 72.70 +200616254827 7101710 7172317108 3 4 6 4 3 6 9 6 50.21 0 71.50 +2006172549 117 7 7101710 0 0 68 6 3 3 4 6 4 0 0 30.10 0 71.00 +2006182549 2 3171010131010 7 80 2 6 4 4 5 4 4 3 40.10 0 70.20 +2006192549 3 710 713 7101720 91 3 4 3 5 3 4 6 7 40.21 0 71.10 +2006202549 423202010 3 7 313 99 9 7 7 4 2 3 2 5 50.21 0 70.00 +2006212549 5 7 7 31010 7 7 3 54 3 3 2 4 4 3 3 2 30.10 0 69.90 +2006222549 6 3 3 7 7 3 3 313 42 2 2 3 3 2 2 2 5 30.00 0 69.90 +2006232549 7 7 313 3 7 3 313 52 3 2 5 2 3 2 2 5 30.10 0 69.30 +2006242549 813131010 7 7 3 7 70 5 5 4 4 3 3 2 3 40.10 0 69.10 +2006252549 9 710 3 7 3 7 013 50 3 4 2 3 2 3 0 5 30.00 0 71.20 +20062625491017 3 3 710102330103 6 2 2 3 4 4 9 15 60.31 4 70.00 +2006272549112713132323 3 320125 12 5 5 9 9 2 2 7 60.31 2 71.20 +2006282549121313 3 7 0 3 310 16 5 5 2 3 0 2 2 4 30.10 0 71.50 +200629254913 7 7 710 7 7 710 62 3 3 3 4 3 3 3 4 30.00 0 70.90 diff --git a/RMextract/pyiriplas/kp_ap.fmt b/RMextract/pyiriplas/kp_ap.fmt index 03237ce..3f47b33 100644 --- a/RMextract/pyiriplas/kp_ap.fmt +++ b/RMextract/pyiriplas/kp_ap.fmt @@ -97,14 +97,14 @@ COLUMNS FMT DESCRIPTION 66-70 F5.1 OTTAWA 10.7-CM SOLAR RADIO FLUX ADJUSTED TO 1 AU--measured at 1700 UT daily and expressed in units of 10 to the -22 Watts/ - meter sq/hertz. Observations began on February 14, 1947. + meter sq/hertz. Observations began on February 14, 1947. From that date through December 31, 1973, the fluxes given - here don't reflect the revisions Ottawa made in 1966. NOTE: + here don't reflect the revisions Ottawa made in 1966. NOTE: If a solar radio burst is in progress during the observation the pre-noon or afternoon value is used (as indicated by a flux qualifier value of 1 in column 71. -71-71 I1 FLUX QUALIFIER. "0" indicates flux required no adjustment; +71-71 I1 FLUX QUALIFIER. "0" indicates flux required no adjustment; "1" indicates flux required adjustment for burst in progress at time of measurement; "2" indicates a flux approximated by either interpolation or extrapolation; and "3" indicates no diff --git a/RMextract/pyiriplas/pyiriplas.py b/RMextract/pyiriplas/pyiriplas.py index 03ca732..7f13720 100644 --- a/RMextract/pyiriplas/pyiriplas.py +++ b/RMextract/pyiriplas/pyiriplas.py @@ -1,4 +1,3 @@ -import numpy as np from pkg_resources import resource_filename from scipy.interpolate import interp1d @@ -6,26 +5,34 @@ class pyiriplas: - def __init__(self,year=2016,month=5,day=12,hour=1.,lon=0.,lat=0.): - self.lon=lon - self.lat=lat - self.yr=year - self.month=month - self.day=day - self.hour=hour - self.jmag=0 #geographic (0) or geomagnetic (1) coordinates - self.datapath=resource_filename(__name__,'ig_rz.dat').replace('ig_rz.dat','') - + def __init__(self, year=2016, month=5, day=12, hour=1.0, lon=0.0, lat=0.0): + self.lon = lon + self.lat = lat + self.yr = year + self.month = month + self.day = day + self.hour = hour + self.jmag = 0 # geographic (0) or geomagnetic (1) coordinates + self.datapath = resource_filename(__name__, "ig_rz.dat").replace( + "ig_rz.dat", "" + ) - def get_profile(self,heights): - '''get interpolated density profile at heights (between 80 and 20200km)''' - #res=_iri.iri_sub(self.flags,jmag=self.jmag,alati=self.lat,along=self.lon,iyyyy=self.yr,mmdd=self.month*100+self.day,dhour=self.hour,heibeg=hstart,heiend=hend,heistp=hstep)[0][0] - res=_iriplas.iri_plas_main(self.datapath,alati=self.lat,along=self.lon,jmag=self.jmag,iyyyy=self.yr,mmdd=self.month*100+self.day,hours=self.hour) + def get_profile(self, heights): + """get interpolated density profile at heights (between 80 and 20200km)""" + # res=_iri.iri_sub(self.flags,jmag=self.jmag,alati=self.lat,along=self.lon,iyyyy=self.yr,mmdd=self.month*100+self.day,dhour=self.hour,heibeg=hstart,heiend=hend,heistp=hstep)[0][0] + res = _iriplas.iri_plas_main( + self.datapath, + alati=self.lat, + along=self.lon, + jmag=self.jmag, + iyyyy=self.yr, + mmdd=self.month * 100 + self.day, + hours=self.hour, + ) h = res[0] - hidx = h>0 + hidx = h > 0 NE = res[1][hidx] - h=h[hidx] - hinterpol = interp1d(h,NE,fill_value='extrapolate') - - return hinterpol(heights) + h = h[hidx] + hinterpol = interp1d(h, NE, fill_value="extrapolate") + return hinterpol(heights) diff --git a/RMextract/pyiriplas/ssn1_12.dat b/RMextract/pyiriplas/ssn1_12.dat index 056b1fb..4ea29e3 100644 --- a/RMextract/pyiriplas/ssn1_12.dat +++ b/RMextract/pyiriplas/ssn1_12.dat @@ -63,14 +63,14 @@ 2006 20.8 18.6 17.4 17.1 17.3 16.3 15.3 15.6 15.6 14.2 12.6 12.1 2007 11.9 11.5 10.7 9.8 8.6 7.6 6.9 6.0 5.9 6.0 5.7 4.9 2008 4.2 3.6 3.3 3.4 3.5 3.3 2.8 2.7 2.3 1.8 1.7 1.7 - 2009 1.8 1.9 2.0 2.2 2.3 2.7 3.6 4.8 6.2 7.1 7.6 8.3 - 2010 9.3 10.6 12.3 14.0 15.5 16.4 16.7 17.4 19.6 23.2 26.5 28.8 - 2011 30.9 33.4 36.9 41.8 47.6 53.2 57.2 59.0 59.5 59.9 61.1 63.4 - 2012 65.2 68.9 67.2 65.9 62.6 58.3 57.3 55.9 58.1 59.4 60.7 61.1 + 2009 1.8 1.9 2.0 2.2 2.3 2.7 3.6 4.8 6.2 7.1 7.6 8.3 + 2010 9.3 10.6 12.3 14.0 15.5 16.4 16.7 17.4 19.6 23.2 26.5 28.8 + 2011 30.9 33.4 36.9 41.8 47.6 53.2 57.2 59.0 59.5 59.9 61.1 63.4 + 2012 65.2 68.9 67.2 65.9 62.6 58.3 57.3 55.9 58.1 59.4 60.7 61.1 2013 58.6 60.6 56.8 57.6 59.1 63.7 66.7 69.3 76.2 74.4 75.3 73.6 - 2014 76.0 75.7 78.4 81.0 80.5 80.9 78.6 75.4 69.0 68.1 65.1 63.9 - 2015 62.5 62.0 60.9 55.9 54.1 50.9 49.5 47.3 45.8 45.6 44.2 40.7 - 2016 37.1 36.3 35.2 33.6 30.4 29.8 27.2 24.2 22.3 21.5 21.1 19.5 + 2014 76.0 75.7 78.4 81.0 80.5 80.9 78.6 75.4 69.0 68.1 65.1 63.9 + 2015 62.5 62.0 60.9 55.9 54.1 50.9 49.5 47.3 45.8 45.6 44.2 40.7 + 2016 37.1 36.3 35.2 33.6 30.4 29.8 27.2 24.2 22.3 21.5 21.1 19.5 2017 18.9 18.5 19.1 16.4 15.5 14.6 14.0 12.4 10.1 11.6 10.9 10.7 2018 9.7 8.9 8.0 5.1 4.3 4.0 4.9 4.1 4.3 4.7 4.9 4.3 2019 3.1 3.6 2.7 2.5 2.2 2.6 2.8 2.4 2.7 2.9 3.1 3.3 diff --git a/RMextract/pyiriplas/ssn2_12.dat b/RMextract/pyiriplas/ssn2_12.dat index 90a0e72..31e4009 100644 --- a/RMextract/pyiriplas/ssn2_12.dat +++ b/RMextract/pyiriplas/ssn2_12.dat @@ -72,8 +72,7 @@ 2015 89.3 86.1 82.1 78.9 76.1 72.1 68.3 66.4 65.9 64.3 61.2 57.8 2016 54.4 52.5 50.4 47.8 44.8 41.5 38.5 36.0 33.2 31.5 29.9 28.5 2017 27.8 26.5 25.7 24.8 23.3 22.2 21.0 19.6 18.3 16.7 15.4 15.1 - 2018 14.2 12.6 9.9 7.8 7.5 7.2 7.0 6.7 6.5 6.8 6.7 6.0 - 2019 5.4 5.0 4.6 4.3 3.9 3.7 3.5 3.5 3.9 4.1 4.4 4.7 - 2020 5.1 5.6 6.1 6.7 7.3 8.0 8.8 9.7 10.6 11.6 12.6 13.6 - 2021 14.7 15.9 12.0 13.4 14.1 15.7 17.1 24.3 25.9 27.4 29.1 30.8 - + 2018 14.2 12.6 9.9 7.8 7.5 7.2 7.0 6.7 6.5 6.8 6.7 6.0 + 2019 5.4 5.0 4.6 4.3 3.9 3.7 3.5 3.5 3.9 4.1 4.4 4.7 + 2020 5.1 5.6 6.1 6.7 7.3 8.0 8.8 9.7 10.6 11.6 12.6 13.6 + 2021 14.7 15.9 12.0 13.4 14.1 15.7 17.1 24.3 25.9 27.4 29.1 30.8 diff --git a/doc/Usage.tex b/doc/Usage.tex index 0d6ea74..efc2a71 100644 --- a/doc/Usage.tex +++ b/doc/Usage.tex @@ -3,8 +3,8 @@ \begin{document} \section{Usage} After installation the RMextract package can be imported in a python -environment. There are five main packages: -\begin{enumerate} +environment. There are five main packages: +\begin{enumerate} \item EMM: This is a tiny python wrapper around some of the functionalities of the GeoMagnetism Library that is provided by the WMM \cite{wmm}. Can be used both with the WMM coefficients or the higher resolution EMM. @@ -84,7 +84,7 @@ \subsubsection{Options} description of this interpolation method. \end{itemize} - + \begin{thebibliography}{} diff --git a/examples/Albus_Coordinates.py b/examples/Albus_Coordinates.py index f4373d9..1daf0a9 100644 --- a/examples/Albus_Coordinates.py +++ b/examples/Albus_Coordinates.py @@ -4,7 +4,6 @@ # 2007 Jan 17 JMA --add conversion from radians to degrees, min, sec - ################################################################################ # some import commands The User should not need to change this. ################################################################################ @@ -14,27 +13,21 @@ import copy import math # import optparse, os, sys -#import re, string -#import inspect -import warnings +# import re, string +# import inspect ################################################################################ # Global variables -M_DEG2RAD = math.pi/180.0 -M_RAD2DEG = 180.0/math.pi +M_DEG2RAD = math.pi / 180.0 +M_RAD2DEG = 180.0 / math.pi M_AS2RAD = M_DEG2RAD / 3600.0 M_RAD2AS = M_RAD2DEG * 3600.0 - - - - - ################################################################################ def deg_num_to_rad(deg, min, sec): - """ convert sexagesimal degrees to radians + """convert sexagesimal degrees to radians This function converts a sexagesimal number sequence to an angle in radians. It works for positive angles (take care of the negative part @@ -44,10 +37,9 @@ def deg_num_to_rad(deg, min, sec): return rad_total - ################################################################################ def hour_num_to_rad(hour, min, sec): - """ convert sexagesimal hours to radians + """convert sexagesimal hours to radians This function converts a sexagesimal number sequence to an angle in radians. It works for positive angles (take care of the negative part @@ -57,174 +49,147 @@ def hour_num_to_rad(hour, min, sec): return rad_total - - - - ################################################################################ def deg_str_to_rad(deg_str): """converts a string of degrees minutes seconds to a radian float -deg_str I string containing a degree angle in sexagesimal notation - such as '-0 12 43.5' or '45d18\'19\"' or '+0:3:56' + deg_str I string containing a degree angle in sexagesimal notation + such as '-0 12 43.5' or '45d18\'19\"' or '+0:3:56' """ deg_str = copy.copy(deg_str.strip()) sign = +1.0 - if(deg_str[0] == '-'): sign = -1.0 + if deg_str[0] == "-": + sign = -1.0 for i in range(len(deg_str)): - if( (deg_str[i].isdigit()) or (deg_str[i]=='.') ): + if (deg_str[i].isdigit()) or (deg_str[i] == "."): pass else: - deg_str = deg_str.replace(deg_str[i],' ') + deg_str = deg_str.replace(deg_str[i], " ") deg_deg = list(map(float, deg_str.strip().split())) - assert(len(deg_deg) == 3) - deg_rad = deg_num_to_rad(deg_deg[0], deg_deg[1], deg_deg[2]) * sign + assert len(deg_deg) == 3 + deg_rad = deg_num_to_rad(deg_deg[0], deg_deg[1], deg_deg[2]) * sign return deg_rad - - - ################################################################################ # convert RA and Dec strings to radian values def radec_str_to_rad2(ra_str, dec_str): """convert RA and Dec strings to radian values -ra_str I String containing a right ascension value in sexagesimal notation - such as '10 02 34.5507' or '02h35m06.78s' or '23:12:02' -dec_str I String containing a declination value in sexagesimal notation - such as '-0 12 43.5' or '45d18\'19\"' or '+0:3:56' + ra_str I String containing a right ascension value in sexagesimal notation + such as '10 02 34.5507' or '02h35m06.78s' or '23:12:02' + dec_str I String containing a declination value in sexagesimal notation + such as '-0 12 43.5' or '45d18\'19\"' or '+0:3:56' -OUTPUT as: ra_rad, dec_rad -ra_rad O ra in radians -dec_rad O dec in radians - """ + OUTPUT as: ra_rad, dec_rad + ra_rad O ra in radians + dec_rad O dec in radians + """ ra_str = copy.copy(ra_str.strip()) for i in range(len(ra_str)): - if( (ra_str[i].isdigit()) or (ra_str[i]=='.') ): + if (ra_str[i].isdigit()) or (ra_str[i] == "."): pass else: - ra_str = ra_str.replace(ra_str[i],' ') + ra_str = ra_str.replace(ra_str[i], " ") ra_hours = list(map(float, ra_str.strip().split())) - assert(len(ra_hours) == 3) + assert len(ra_hours) == 3 ra_rad = hour_num_to_rad(ra_hours[0], ra_hours[1], ra_hours[2]) dec_str = copy.copy(dec_str.strip()) sign = +1.0 - if(dec_str[0] == '-'): sign = -1.0 + if dec_str[0] == "-": + sign = -1.0 for i in range(len(dec_str)): - if( (dec_str[i].isdigit()) or (dec_str[i]=='.') ): + if (dec_str[i].isdigit()) or (dec_str[i] == "."): pass else: - dec_str = dec_str.replace(dec_str[i],' ') + dec_str = dec_str.replace(dec_str[i], " ") dec_deg = list(map(float, dec_str.strip().split())) - assert(len(dec_deg) == 3) - dec_rad = deg_num_to_rad(dec_deg[0], dec_deg[1], dec_deg[2]) * sign - print ('observing in direction RA, DEC in radians ', ra_rad, dec_rad) + assert len(dec_deg) == 3 + dec_rad = deg_num_to_rad(dec_deg[0], dec_deg[1], dec_deg[2]) * sign + print("observing in direction RA, DEC in radians ", ra_rad, dec_rad) return ra_rad, dec_rad - - - - - - - - ################################################################################ -def radec_str_to_rad(ra_str, dec_str = None): +def radec_str_to_rad(ra_str, dec_str=None): """convert RA and Dec strings to radian values -If dec_str is not None, + If dec_str is not None, -ra_str I String containing a right ascension value in sexagesimal notation - such as '10 02 34.5507' or '02h35m06.78s' or '23:12:02' -dec_str I String containing a declination value in sexagesimal notation - such as '-0 12 43.5' or '45d18\'19\"' or '+0:3:56' + ra_str I String containing a right ascension value in sexagesimal notation + such as '10 02 34.5507' or '02h35m06.78s' or '23:12:02' + dec_str I String containing a declination value in sexagesimal notation + such as '-0 12 43.5' or '45d18\'19\"' or '+0:3:56' -Else, ra_str is a string containing both the right ascension and declination -information as one big string, with the sexagesimal notation above. + Else, ra_str is a string containing both the right ascension and declination + information as one big string, with the sexagesimal notation above. -OUTPUT as: ra_rad, dec_rad -ra_rad O ra in radians -dec_rad O dec in radians - """ - if(dec_str is not None): return radec_str_to_rad2(ra_str, dec_str) + OUTPUT as: ra_rad, dec_rad + ra_rad O ra in radians + dec_rad O dec in radians + """ + if dec_str is not None: + return radec_str_to_rad2(ra_str, dec_str) # Else, we do it this way with one big string # get the numbers str = copy.copy(ra_str.strip()) for i in range(len(str)): - if( (str[i].isdigit()) or (str[i]=='.') or (str[i]=='-') ): + if (str[i].isdigit()) or (str[i] == ".") or (str[i] == "-"): pass else: - str = str.replace(str[i],' ') + str = str.replace(str[i], " ") str = str.strip().split() sign = +1.0 - if(str[3][0] == '-'): + if str[3][0] == "-": sign = -1.0 - if(len(str[3]) == 1): + if len(str[3]) == 1: str[3:] = str[4:] else: - str[3] = str[3].replace('-',' ') + str[3] = str[3].replace("-", " ") nums = list(map(float, str)) - assert(len(nums) == 6) + assert len(nums) == 6 ra_rad = hour_num_to_rad(nums[0], nums[1], nums[2]) - dec_rad = deg_num_to_rad(nums[3], nums[4], nums[5]) * sign + dec_rad = deg_num_to_rad(nums[3], nums[4], nums[5]) * sign return ra_rad, dec_rad - - - ################################################################################ def rad_to_dms(rad): - """ convert radians to sexagesimal degrees + """convert radians to sexagesimal degrees - This function converts a positive angle in radians to a sexagesimal - angle in degrees, minutes, and seconds. + This function converts a positive angle in radians to a sexagesimal + angle in degrees, minutes, and seconds. - It works for positive angles (take care of the negative part - yourself. + It works for positive angles (take care of the negative part + yourself. -INPUTS: -rad I positive angle in radians + INPUTS: + rad I positive angle in radians -OUTPUTS: deg min sec -deg O degrees (integer) -min O minutes (integer) -sec O seconds (float) + OUTPUTS: deg min sec + deg O degrees (integer) + min O minutes (integer) + sec O seconds (float) """ d = math.fabs(rad) * M_RAD2DEG - deg = int(d+2E-13) - m = (d-deg) * 60.0 - min = int(m+1E-11) + deg = int(d + 2e-13) + m = (d - deg) * 60.0 + min = int(m + 1e-11) sec = (m - min) * 60.0 return deg, min, sec - - - - - - - - - - - - - ################################################################################ def hav(theta): """haversine mathematical function, angles in radians""" # I am expecting relatively small angles sometimes # h = 0.5 - 0.5 * math.cos(theta) h = math.sin(0.5 * theta) - h = h*h + h = h * h return h + ################################################################################ def ahav(theta): """inverse haversine mathematical function, angles in radians""" @@ -235,40 +200,39 @@ def ahav(theta): ################################################################################ def angular_separation(ra_1, dec_1, ra_2, dec_2): - """ calculate the angular separation of two sky directions, in radians + """calculate the angular separation of two sky directions, in radians -Note, all angles in radians. + Note, all angles in radians. -This function nominally takes right ascension and declination, but would also -work with azimuth and elevation, galactic coordinates, ecliptical coords, -and so on. + This function nominally takes right ascension and declination, but would also + work with azimuth and elevation, galactic coordinates, ecliptical coords, + and so on. -Taken from _Astronomical Algorithms_, Meeus, 1991 + Taken from _Astronomical Algorithms_, Meeus, 1991 """ delta_dec = dec_1 - dec_2 delta_ra = ra_1 - ra_2 - hav_d = hav(delta_dec) + math.cos(dec_1)*math.cos(dec_2)*hav(delta_ra) + hav_d = hav(delta_dec) + math.cos(dec_1) * math.cos(dec_2) * hav(delta_ra) d = ahav(hav_d) return d + ################################################################################ def deg_str_dot_to_rad(deg_str): """converts a string of degrees minutes seconds to a radian float -deg_str I string containing a degree angle in sexagesimal notation with dot/period separation - such as '-45.16.57.10000' - needed for ASKAP field centre conversion + deg_str I string containing a degree angle in sexagesimal notation with dot/period separation + such as '-45.16.57.10000' - needed for ASKAP field centre conversion """ - newStr = '' + newStr = "" counter = 0 for i in deg_str: - if i == '.' and counter < 2: - newStr += ':' - counter = counter +1 - else: - newStr += i + if i == "." and counter < 2: + newStr += ":" + counter = counter + 1 + else: + newStr += i deg_rad = deg_str_to_rad(newStr) return deg_rad - - diff --git a/examples/agw_examples.py b/examples/agw_examples.py index 3d0b8b9..5e37f48 100644 --- a/examples/agw_examples.py +++ b/examples/agw_examples.py @@ -7,113 +7,136 @@ import RMextract.PosTools as PosTools from RMextract.getRM import getRM -OBJECT="EoR0" -OBJECT="eor_2456967_MWA_BrightLoqRM" -START_TIME="2013/11/28 00:00:00" -END_TIME="2013/11/28 23:59:59" -START_TIME="2014/11/06 00:00:00" -END_TIME="2014/11/06 23:59:59" -RA="19:40:45.01" -DEC="-20:00:00.00" -OBJECT="UPINGTON_Nov_2014" -OBJECT="Upington_dec_2014" -START_TIME="2014/12/09 00:00:00" -END_TIME="2014/12/09 23:59:59" +OBJECT = "EoR0" +OBJECT = "eor_2456967_MWA_BrightLoqRM" +START_TIME = "2013/11/28 00:00:00" +END_TIME = "2013/11/28 23:59:59" +START_TIME = "2014/11/06 00:00:00" +END_TIME = "2014/11/06 23:59:59" +RA = "19:40:45.01" +DEC = "-20:00:00.00" +OBJECT = "UPINGTON_Nov_2014" +OBJECT = "Upington_dec_2014" +START_TIME = "2014/12/09 00:00:00" +END_TIME = "2014/12/09 23:59:59" TIME_STEP = 300.0 -TIME_OFFSET=120. +TIME_OFFSET = 120.0 use_azel = False -out_file='RMextract_report_test_' + OBJECT +out_file = "RMextract_report_test_" + OBJECT -MWA_antennas = np.array([[-2559314.23084924,5095535.90961438,-2848889.57667157], - [-2559293.10717106,5095498.79164383,-2848974.05801863], - [-2559156.42269442,5095418.83230373,-2849233.34162414], - [-2559094.63804600,5095526.84526066,-2849097.63284488], - [-2559042.54106487,5095566.88538445,-2849072.42535023], - [-2559068.53757350,5095654.59288871,-2848892.60844473], - [-2559161.70851932,5095607.73286033,-2848894.91011893], - [-2559173.78330034,5095643.10464650,-2848820.20086397], - [-2559782.26851932,5095304.54438001,-2848875.78669410], - [-2559644.22829760,5095369.93521424,-2848885.21756417], - [-2559507.77695003,5095490.23883646,-2848797.39833977], - [-2559467.43177484,5095508.01973328,-2848802.30233654], - [-2559460.59086333,5095515.74910944,-2848794.76371318], - [-2559491.68457220,5095527.67486954,-2848745.44773601], - [-2559603.60609646,5095563.73884050,-2848579.72258876], - [-2559631.28428317,5095541.41922988,-2848594.98830325], - [-2559113.92023486,5095854.59042124,-2848492.05455485], - [-2559133.51844911,5095831.00304170,-2848517.14718873], - [-2559018.96896708,5095793.67783611,-2848686.69023686], - [-2558906.48396095,5095592.28259425,-2849148.93562390], - [-2558894.77687225,5095720.00453191,-2848930.82517056], - [-2558880.58102582,5095762.06255238,-2848868.27661380], - [-2558503.88881043,5095891.11710898,-2848981.31195756], - [-2558648.85477276,5096060.47633611,-2848544.49069260], - [-2558998.73468649,5095390.06352995,-2849423.09595365], - [-2559238.04568324,5095263.75775157,-2849432.88470164], - [-2558856.49159020,5095257.96516587,-2849788.57821277], - [-2558761.92575271,5095281.91134845,-2849829.99130606], - [-2558719.21221208,5095416.28342253,-2849628.99110746], - [-2558836.79342206,5095555.42415917,-2849277.33903756], - [-2558850.45931999,5095586.71918979,-2849209.71070222], - [-2558890.31919482,5095521.92810583,-2849288.42518348]]) +MWA_antennas = np.array( + [ + [-2559314.23084924, 5095535.90961438, -2848889.57667157], + [-2559293.10717106, 5095498.79164383, -2848974.05801863], + [-2559156.42269442, 5095418.83230373, -2849233.34162414], + [-2559094.63804600, 5095526.84526066, -2849097.63284488], + [-2559042.54106487, 5095566.88538445, -2849072.42535023], + [-2559068.53757350, 5095654.59288871, -2848892.60844473], + [-2559161.70851932, 5095607.73286033, -2848894.91011893], + [-2559173.78330034, 5095643.10464650, -2848820.20086397], + [-2559782.26851932, 5095304.54438001, -2848875.78669410], + [-2559644.22829760, 5095369.93521424, -2848885.21756417], + [-2559507.77695003, 5095490.23883646, -2848797.39833977], + [-2559467.43177484, 5095508.01973328, -2848802.30233654], + [-2559460.59086333, 5095515.74910944, -2848794.76371318], + [-2559491.68457220, 5095527.67486954, -2848745.44773601], + [-2559603.60609646, 5095563.73884050, -2848579.72258876], + [-2559631.28428317, 5095541.41922988, -2848594.98830325], + [-2559113.92023486, 5095854.59042124, -2848492.05455485], + [-2559133.51844911, 5095831.00304170, -2848517.14718873], + [-2559018.96896708, 5095793.67783611, -2848686.69023686], + [-2558906.48396095, 5095592.28259425, -2849148.93562390], + [-2558894.77687225, 5095720.00453191, -2848930.82517056], + [-2558880.58102582, 5095762.06255238, -2848868.27661380], + [-2558503.88881043, 5095891.11710898, -2848981.31195756], + [-2558648.85477276, 5096060.47633611, -2848544.49069260], + [-2558998.73468649, 5095390.06352995, -2849423.09595365], + [-2559238.04568324, 5095263.75775157, -2849432.88470164], + [-2558856.49159020, 5095257.96516587, -2849788.57821277], + [-2558761.92575271, 5095281.91134845, -2849829.99130606], + [-2558719.21221208, 5095416.28342253, -2849628.99110746], + [-2558836.79342206, 5095555.42415917, -2849277.33903756], + [-2558850.45931999, 5095586.71918979, -2849209.71070222], + [-2558890.31919482, 5095521.92810583, -2849288.42518348], + ] +) ra_rad, dec_rad = ac.radec_str_to_rad2(RA, DEC) -pointing=np.array([ra_rad, dec_rad]) -print('pointing', pointing) -upington_position = [[ 5233099.76611549, 2035838.60712339, -3016689.89007898]] -#result = getRM(use_azel=True,start_time=START_TIME,end_time=END_TIME, timestep=TIME_STEP,stat_positions= MWA_antennas,useEMM=True,TIME_OFFSET=TIME_OFFSET) +pointing = np.array([ra_rad, dec_rad]) +print("pointing", pointing) +upington_position = [[5233099.76611549, 2035838.60712339, -3016689.89007898]] +# result = getRM(use_azel=True,start_time=START_TIME,end_time=END_TIME, timestep=TIME_STEP,stat_positions= MWA_antennas,useEMM=True,TIME_OFFSET=TIME_OFFSET) -result = getRM(use_azel=use_azel,radec=pointing,out_file='test_report',object=OBJECT,start_time=START_TIME,end_time=END_TIME, timestep=TIME_STEP,stat_positions= upington_position,useEMM=True,TIME_OFFSET=TIME_OFFSET) +result = getRM( + use_azel=use_azel, + radec=pointing, + out_file="test_report", + object=OBJECT, + start_time=START_TIME, + end_time=END_TIME, + timestep=TIME_STEP, + stat_positions=upington_position, + useEMM=True, + TIME_OFFSET=TIME_OFFSET, +) -#result = getRM(radec=pointing,start_time=START_TIME,end_time=END_TIME, timestep=TIME_STEP,stat_positions= MWA_antennas,useEMM=True,TIME_OFFSET=TIME_OFFSET) +# result = getRM(radec=pointing,start_time=START_TIME,end_time=END_TIME, timestep=TIME_STEP,stat_positions= MWA_antennas,useEMM=True,TIME_OFFSET=TIME_OFFSET) location = upington_position -shape = result['times'].shape -timerange=[result['times'][0],result['times'][shape[0]-1]] -reference_time=result['reference_time'] -str_start_time=PosTools.obtain_observation_year_month_day_hms(reference_time) +shape = result["times"].shape +timerange = [result["times"][0], result["times"][shape[0] - 1]] +reference_time = result["reference_time"] +str_start_time = PosTools.obtain_observation_year_month_day_hms(reference_time) if os.path.exists(out_file): - os.remove(out_file) -log = open(out_file, 'a') -log.write ('Observing %s\n' % OBJECT) -log.write ('station_positions %s \n' % location) -log.write ('start and end times %s %s \n' % (timerange[0], timerange[1])) -log.write ('reference time for rel_time=0: year month day hr min sec %s %s %s %s %s %s \n' % str_start_time) + os.remove(out_file) +log = open(out_file, "a") +log.write("Observing %s\n" % OBJECT) +log.write("station_positions %s \n" % location) +log.write("start and end times %s %s \n" % (timerange[0], timerange[1])) +log.write( + "reference time for rel_time=0: year month day hr min sec %s %s %s %s %s %s \n" + % str_start_time +) if not use_azel: - log.write ('observation direction %s %s \n' % (pointing[0], pointing[1])) -log.write ('\n') + log.write("observation direction %s %s \n" % (pointing[0], pointing[1])) +log.write("\n") -stat_pos=MWA_antennas -stat_pos= upington_position -timegrid=result['times'] -#reference_time=timerange[0] +stat_pos = MWA_antennas +stat_pos = upington_position +timegrid = result["times"] +# reference_time=timerange[0] k = 0 -for key in result['station_names']: +for key in result["station_names"]: seq_no = 0 - log.write ('data for station %s at position %s\n' % (key, stat_pos[k])) - log.write ('seq rel_time time_width El Az STEC RM (rad/m2) VTEC factor \n') - for i in range (timegrid.shape[0]): - el = math.degrees(result['elev'][key][i]) - az = math.degrees(result['azimuth'][key][i]) - stec =result['STEC'][key][i][0] - rm = result['RM'][key][i][0] - vtec_factor = 1.0 / result['AirMass'][key][i] - rel_time = timegrid[i] - reference_time - if i == 0: - time_width = reference_time - timegrid[i] - else: - time_width = timegrid[i] - timegrid[i-1] - if el < 0 : - ok = 1 - stec = 0.0 - rm = 0.0 - vtec_factor = 1.0 - else: - ok = 0 - log.write("%s : %s %s %s %s %s %s %s %s\n" % (seq_no, ok, rel_time, time_width, el, az, stec, rm, vtec_factor)) - seq_no = seq_no + 1 + log.write("data for station %s at position %s\n" % (key, stat_pos[k])) + log.write( + "seq rel_time time_width El Az STEC RM (rad/m2) VTEC factor \n" + ) + for i in range(timegrid.shape[0]): + el = math.degrees(result["elev"][key][i]) + az = math.degrees(result["azimuth"][key][i]) + stec = result["STEC"][key][i][0] + rm = result["RM"][key][i][0] + vtec_factor = 1.0 / result["AirMass"][key][i] + rel_time = timegrid[i] - reference_time + if i == 0: + time_width = reference_time - timegrid[i] + else: + time_width = timegrid[i] - timegrid[i - 1] + if el < 0: + ok = 1 + stec = 0.0 + rm = 0.0 + vtec_factor = 1.0 + else: + ok = 0 + log.write( + "%s : %s %s %s %s %s %s %s %s\n" + % (seq_no, ok, rel_time, time_width, el, az, stec, rm, vtec_factor) + ) + seq_no = seq_no + 1 k = k + 1 - log.write (' \n') + log.write(" \n") log.close() diff --git a/examples/example_getRM.py b/examples/example_getRM.py index c5300d5..d9fa51c 100644 --- a/examples/example_getRM.py +++ b/examples/example_getRM.py @@ -2,17 +2,31 @@ import RMextract.getRM as gt -t = Time('2010-01-01T00:00:00',format='isot',scale ='utc') -starttime = t.mjd*24*3600. # getRM still wants MJD time in seconds (casacore definition) -endtime = starttime + 3600. # one hour of data -statpos = [3826577.1095 ,461022.900196, 5064892.758] #LOFAR CS002LBA (center) , ITRF xyz in meters -pointing=[ 2.15374123, 0.8415521 ] #3C196 Ra, Dec in radians +t = Time("2010-01-01T00:00:00", format="isot", scale="utc") +starttime = ( + t.mjd * 24 * 3600.0 +) # getRM still wants MJD time in seconds (casacore definition) +endtime = starttime + 3600.0 # one hour of data +statpos = [ + 3826577.1095, + 461022.900196, + 5064892.758, +] # LOFAR CS002LBA (center) , ITRF xyz in meters +pointing = [2.15374123, 0.8415521] # 3C196 Ra, Dec in radians -RMdict = gt.getRM(ionexPath='./IONEXdata/', radec=pointing, timestep=100, timerange = [starttime, endtime], stat_positions=[statpos,]) +RMdict = gt.getRM( + ionexPath="./IONEXdata/", + radec=pointing, + timestep=100, + timerange=[starttime, endtime], + stat_positions=[ + statpos, + ], +) -times=RMdict['times'] -RM = RMdict['RM']['st1'] +times = RMdict["times"] +RM = RMdict["RM"]["st1"] -print ("TIME(mjd) RM (rad/m^2)") -for tm,rm in zip(times,RM): - print ("%5.2f %1.3f"%(tm/(3600*24.),rm)) +print("TIME(mjd) RM (rad/m^2)") +for tm, rm in zip(times, RM): + print("%5.2f %1.3f" % (tm / (3600 * 24.0), rm)) diff --git a/examples/example_getRM_write_to_file.py b/examples/example_getRM_write_to_file.py index 3146502..951e880 100644 --- a/examples/example_getRM_write_to_file.py +++ b/examples/example_getRM_write_to_file.py @@ -5,108 +5,130 @@ import RMextract.PosTools as PosTools from RMextract.getRM import getRM -OBJECT="EoR0" -START_TIME="2013/11/28 00:00:00" -END_TIME="2013/11/28 23:59:59" -END_TIME="2013/11/28 01:59:59" -OBJECT="MWA_test" -START_TIME="2014/12/01 00:00:00" -END_TIME="2014/12/01 23:59:59" +OBJECT = "EoR0" +START_TIME = "2013/11/28 00:00:00" +END_TIME = "2013/11/28 23:59:59" +END_TIME = "2013/11/28 01:59:59" +OBJECT = "MWA_test" +START_TIME = "2014/12/01 00:00:00" +END_TIME = "2014/12/01 23:59:59" TIME_STEP = 300.0 -TIME_OFFSET=120. -out_file='test_RMextract_report_' + OBJECT -use_mean=True +TIME_OFFSET = 120.0 +out_file = "test_RMextract_report_" + OBJECT +use_mean = True use_azel = True -MWA_antennas = np.array([[-2559314.23084924,5095535.90961438,-2848889.57667157], - [-2559293.10717106,5095498.79164383,-2848974.05801863], - [-2559156.42269442,5095418.83230373,-2849233.34162414], - [-2559094.63804600,5095526.84526066,-2849097.63284488], - [-2559042.54106487,5095566.88538445,-2849072.42535023], - [-2559068.53757350,5095654.59288871,-2848892.60844473], - [-2559161.70851932,5095607.73286033,-2848894.91011893], - [-2559173.78330034,5095643.10464650,-2848820.20086397], - [-2559782.26851932,5095304.54438001,-2848875.78669410], - [-2559644.22829760,5095369.93521424,-2848885.21756417], - [-2559507.77695003,5095490.23883646,-2848797.39833977], - [-2559467.43177484,5095508.01973328,-2848802.30233654], - [-2559460.59086333,5095515.74910944,-2848794.76371318], - [-2559491.68457220,5095527.67486954,-2848745.44773601], - [-2559603.60609646,5095563.73884050,-2848579.72258876], - [-2559631.28428317,5095541.41922988,-2848594.98830325], - [-2559113.92023486,5095854.59042124,-2848492.05455485], - [-2559133.51844911,5095831.00304170,-2848517.14718873], - [-2559018.96896708,5095793.67783611,-2848686.69023686], - [-2558906.48396095,5095592.28259425,-2849148.93562390], - [-2558894.77687225,5095720.00453191,-2848930.82517056], - [-2558880.58102582,5095762.06255238,-2848868.27661380], - [-2558503.88881043,5095891.11710898,-2848981.31195756], - [-2558648.85477276,5096060.47633611,-2848544.49069260], - [-2558998.73468649,5095390.06352995,-2849423.09595365], - [-2559238.04568324,5095263.75775157,-2849432.88470164], - [-2558856.49159020,5095257.96516587,-2849788.57821277], - [-2558761.92575271,5095281.91134845,-2849829.99130606], - [-2558719.21221208,5095416.28342253,-2849628.99110746], - [-2558836.79342206,5095555.42415917,-2849277.33903756], - [-2558850.45931999,5095586.71918979,-2849209.71070222], - [-2558890.31919482,5095521.92810583,-2849288.42518348]]) +MWA_antennas = np.array( + [ + [-2559314.23084924, 5095535.90961438, -2848889.57667157], + [-2559293.10717106, 5095498.79164383, -2848974.05801863], + [-2559156.42269442, 5095418.83230373, -2849233.34162414], + [-2559094.63804600, 5095526.84526066, -2849097.63284488], + [-2559042.54106487, 5095566.88538445, -2849072.42535023], + [-2559068.53757350, 5095654.59288871, -2848892.60844473], + [-2559161.70851932, 5095607.73286033, -2848894.91011893], + [-2559173.78330034, 5095643.10464650, -2848820.20086397], + [-2559782.26851932, 5095304.54438001, -2848875.78669410], + [-2559644.22829760, 5095369.93521424, -2848885.21756417], + [-2559507.77695003, 5095490.23883646, -2848797.39833977], + [-2559467.43177484, 5095508.01973328, -2848802.30233654], + [-2559460.59086333, 5095515.74910944, -2848794.76371318], + [-2559491.68457220, 5095527.67486954, -2848745.44773601], + [-2559603.60609646, 5095563.73884050, -2848579.72258876], + [-2559631.28428317, 5095541.41922988, -2848594.98830325], + [-2559113.92023486, 5095854.59042124, -2848492.05455485], + [-2559133.51844911, 5095831.00304170, -2848517.14718873], + [-2559018.96896708, 5095793.67783611, -2848686.69023686], + [-2558906.48396095, 5095592.28259425, -2849148.93562390], + [-2558894.77687225, 5095720.00453191, -2848930.82517056], + [-2558880.58102582, 5095762.06255238, -2848868.27661380], + [-2558503.88881043, 5095891.11710898, -2848981.31195756], + [-2558648.85477276, 5096060.47633611, -2848544.49069260], + [-2558998.73468649, 5095390.06352995, -2849423.09595365], + [-2559238.04568324, 5095263.75775157, -2849432.88470164], + [-2558856.49159020, 5095257.96516587, -2849788.57821277], + [-2558761.92575271, 5095281.91134845, -2849829.99130606], + [-2558719.21221208, 5095416.28342253, -2849628.99110746], + [-2558836.79342206, 5095555.42415917, -2849277.33903756], + [-2558850.45931999, 5095586.71918979, -2849209.71070222], + [-2558890.31919482, 5095521.92810583, -2849288.42518348], + ] +) -result = getRM(use_azel=use_azel,use_mean=use_mean,object=OBJECT,start_time=START_TIME,end_time=END_TIME, timestep=TIME_STEP,stat_positions=MWA_antennas,useEMM=True,TIME_OFFSET=TIME_OFFSET) +result = getRM( + use_azel=use_azel, + use_mean=use_mean, + object=OBJECT, + start_time=START_TIME, + end_time=END_TIME, + timestep=TIME_STEP, + stat_positions=MWA_antennas, + useEMM=True, + TIME_OFFSET=TIME_OFFSET, +) -timerange=[result['times'][0],result['times'][-1]] -timegrid=result['times'] -stat_pos=result['stat_pos'] -reference_time=result['reference_time'] -str_start_time=PosTools.obtain_observation_year_month_day_hms(reference_time) +timerange = [result["times"][0], result["times"][-1]] +timegrid = result["times"] +stat_pos = result["stat_pos"] +reference_time = result["reference_time"] +str_start_time = PosTools.obtain_observation_year_month_day_hms(reference_time) if os.path.exists(out_file): - os.remove(out_file) -log = open(out_file, 'a') -log.write ('Observing %s\n' % OBJECT) -if use_azel: - log.write('observing at a fixed azimuth and elevation\n') + os.remove(out_file) +log = open(out_file, "a") +log.write("Observing %s\n" % OBJECT) +if use_azel: + log.write("observing at a fixed azimuth and elevation\n") if use_mean: - log.write ('station_positions %s \n' % MWA_antennas) - log.write ('mean of station positions %s \n' % stat_pos) + log.write("station_positions %s \n" % MWA_antennas) + log.write("mean of station positions %s \n" % stat_pos) else: - log.write ('station_positions %s \n' % MWA_antennas) -log.write ('start and end times %s %s \n' % (timerange[0], timerange[1])) -log.write ('reference time for rel_time=0: year month day hr min sec %s %s %s %s %s %s \n' % str_start_time) -log.write ('\n') + log.write("station_positions %s \n" % MWA_antennas) +log.write("start and end times %s %s \n" % (timerange[0], timerange[1])) +log.write( + "reference time for rel_time=0: year month day hr min sec %s %s %s %s %s %s \n" + % str_start_time +) +log.write("\n") k = 0 -for key in result['station_names']: +for key in result["station_names"]: seq_no = 0 if use_mean: - log.write ('data for station mean position at %s\n' % (stat_pos[k])) + log.write("data for station mean position at %s\n" % (stat_pos[k])) else: - log.write ('data for station %s at position %s\n' % (key, stat_pos[k])) - log.write ('seq rel_time time_width El Az STEC RM (rad/m2) VTEC factor \n') - for i in range (timegrid.shape[0]): - el = result['elev'][key][i] - if el < 0 : - ok = 1 - stec = 0.0 - rm = 0.0 - vtec_factor = 1.0 - else: - ok = 0 - stec =result['STEC'][key][i] - rm = result['RM'][key][i] - vtec_factor = 1.0 / result['AirMass'][key][i] - az = result['azimuth'][key][i] - rel_time = timegrid[i] - reference_time - if i == 0: - time_width = reference_time - timegrid[i] - else: - time_width = timegrid[i] - timegrid[i-1] - log.write("%s : %s %s %s %s %s %s %s %s\n" % (seq_no, ok, rel_time, time_width, el, az, stec, rm, vtec_factor)) - seq_no = seq_no + 1 + log.write("data for station %s at position %s\n" % (key, stat_pos[k])) + log.write( + "seq rel_time time_width El Az STEC RM (rad/m2) VTEC factor \n" + ) + for i in range(timegrid.shape[0]): + el = result["elev"][key][i] + if el < 0: + ok = 1 + stec = 0.0 + rm = 0.0 + vtec_factor = 1.0 + else: + ok = 0 + stec = result["STEC"][key][i] + rm = result["RM"][key][i] + vtec_factor = 1.0 / result["AirMass"][key][i] + az = result["azimuth"][key][i] + rel_time = timegrid[i] - reference_time + if i == 0: + time_width = reference_time - timegrid[i] + else: + time_width = timegrid[i] - timegrid[i - 1] + log.write( + "%s : %s %s %s %s %s %s %s %s\n" + % (seq_no, ok, rel_time, time_width, el, az, stec, rm, vtec_factor) + ) + seq_no = seq_no + 1 k = k + 1 try: - if use_mean: - break - except: - pass - log.write (' \n') + if use_mean: + break + except: + pass + log.write(" \n") log.close() diff --git a/examples/example_get_Bfield.py b/examples/example_get_Bfield.py index 77c336c..b822aa9 100644 --- a/examples/example_get_Bfield.py +++ b/examples/example_get_Bfield.py @@ -3,37 +3,49 @@ import RMextract.getRM as gt -a=tab.taql('calc MJD("2013/11/01/00:00:00")')[0]*3600*24 -b=tab.taql('calc MJD("2013/11/09/00:00:00")')[0]*3600*24 +a = tab.taql('calc MJD("2013/11/01/00:00:00")')[0] * 3600 * 24 +b = tab.taql('calc MJD("2013/11/09/00:00:00")')[0] * 3600 * 24 -statpos=gt.PosTools.posCS002 -pointing=array([ 2.15374123, 0.8415521 ]) #3C196 -bigdict=gt.getRM(ionexPath='./IONEXdata/',earth_rot=0,ha_limit=45*np.pi/180,radec=pointing,timestep=1800, timerange = [a, b],stat_positions=[statpos,]) -flags=np.logical_not(bigdict['flags']['st1']) -times=bigdict['times'][np.logical_not(flags)] -timess=[tm/(3600*24.) for tm in times] -dates=tab.taql('calc ctod($timess)') -if 'array' in dates.keys(): - dates=dates['array'] +statpos = gt.PosTools.posCS002 +pointing = array([2.15374123, 0.8415521]) # 3C196 +bigdict = gt.getRM( + ionexPath="./IONEXdata/", + earth_rot=0, + ha_limit=45 * np.pi / 180, + radec=pointing, + timestep=1800, + timerange=[a, b], + stat_positions=[ + statpos, + ], +) +flags = np.logical_not(bigdict["flags"]["st1"]) +times = bigdict["times"][np.logical_not(flags)] +timess = [tm / (3600 * 24.0) for tm in times] +dates = tab.taql("calc ctod($timess)") +if "array" in dates.keys(): + dates = dates["array"] else: - dates=dates[dates.keys()[0]] #backward compatibility with older casacore vresions -format="%Y/%m/%d/%H:%M:%S.%f" -mydatetimes=[datetime.datetime.strptime(mydate,format) for mydate in dates] + dates = dates[ + dates.keys()[0] + ] # backward compatibility with older casacore vresions +format = "%Y/%m/%d/%H:%M:%S.%f" +mydatetimes = [datetime.datetime.strptime(mydate, format) for mydate in dates] -bpar=bigdict['Bpar']['st1'][np.logical_not(flags)] -bfield=bigdict['BField']['st1'][np.logical_not(flags)] -abs_field=np.sqrt(np.sum(np.square(bfield),axis=1)) -bperp=abs_field-np.abs(bpar) -plot_date(mydatetimes,bperp,'-') -plot_date(mydatetimes,bpar,'-') -plot_date(mydatetimes,bperp) -plot_date(mydatetimes,bpar) +bpar = bigdict["Bpar"]["st1"][np.logical_not(flags)] +bfield = bigdict["BField"]["st1"][np.logical_not(flags)] +abs_field = np.sqrt(np.sum(np.square(bfield), axis=1)) +bperp = abs_field - np.abs(bpar) +plot_date(mydatetimes, bperp, "-") +plot_date(mydatetimes, bpar, "-") +plot_date(mydatetimes, bperp) +plot_date(mydatetimes, bpar) plt.gcf().autofmt_xdate() ylabel("Bpar (nGaus)") show() -rm=bigdict['RM']['st1'][np.logical_not(flags)] -plot_date(mydatetimes,rm,'-') -#plot_date(mydatetimes,rm) +rm = bigdict["RM"]["st1"][np.logical_not(flags)] +plot_date(mydatetimes, rm, "-") +# plot_date(mydatetimes,rm) plt.gcf().autofmt_xdate() ylabel("RM (rad/m^2)") show() diff --git a/examples/example_get_RM_3C196.py b/examples/example_get_RM_3C196.py index 279de5f..47a6be6 100644 --- a/examples/example_get_RM_3C196.py +++ b/examples/example_get_RM_3C196.py @@ -3,79 +3,122 @@ import RMextract.getRM as gt -rc("lines",lw=3) -rc('font', family='serif', size=16) +rc("lines", lw=3) +rc("font", family="serif", size=16) -#a=tab.taql('calc MJD("2013/03/02/17:02:54")')[0]*3600*24 -#b=tab.taql('calc MJD("2013/03/03/01:02:50")')[0]*3600*24 -a=tab.taql('calc MJD("2012/12/06/22:46:05")')[0]*3600*24 -b=tab.taql('calc MJD("2012/12/07/16:35:55")')[0]*3600*24 +# a=tab.taql('calc MJD("2013/03/02/17:02:54")')[0]*3600*24 +# b=tab.taql('calc MJD("2013/03/03/01:02:50")')[0]*3600*24 +a = tab.taql('calc MJD("2012/12/06/22:46:05")')[0] * 3600 * 24 +b = tab.taql('calc MJD("2012/12/07/16:35:55")')[0] * 3600 * 24 -statpos=gt.PosTools.posCS002 -pointing=array([ 2.15374123, 0.8415521 ]) #3C196 -#pointing=array([3.7146860578925645, 0.9111636804140731 ]) #3C295 -#tec=gt.getRM(ionexPath='/home/users/mevius/IONEXdata/',earth_rot=0,ha_limit=1*np.pi,radec=pointing,timestep=300, timerange = [a, b],stat_positions=[statpos,],server="ftp://gnss.oma.be/gnss/products/IONEX/",prefix="ROBR") -#tec2=gt.getRM(ionexPath='/home/mevius/IONEXdata/',earth_rot=0,ha_limit=1*np.pi,radec=pointing,timestep=300, timerange = [a, b],stat_positions=[statpos,],prefix='iltg') -tec3=gt.getRM(ionexPath='/home/users/mevius/IONEXdata/',server="ftp://igs-final.man.olsztyn.pl/pub/gps_data/GPS_IONO/cmpcmb/",prefix="igsg",earth_rot=1,radec=pointing,timestep=150, timerange = [a, b+150],stat_positions=[statpos,]) -tec2=gt.getRM(ionexPath='/home/users/mevius/IONEXdata/',server='ftp://213.184.6.172/home/gnss/products/ionex/',earth_rot=0.5,ha_limit=1*np.pi,radec=pointing,timestep=150, timerange = [a, b+150],stat_positions=[statpos,],prefix='ILTF') -tec=gt.getRM(ionexPath='/home/users/mevius/IONEXdata/',server='ftp://213.184.6.172/home/gnss/products/ionex/',earth_rot=0.5,ha_limit=1*np.pi,radec=pointing,timestep=150, timerange = [a, b+150],stat_positions=[statpos,],prefix='ILTQ') -#tec3=gt.getRM(ionexPath='/home/mevius/IONEXdata/',earth_rot=1,ha_limit=1*np.pi,radec=pointing,timestep=100, timerange = [a, b],stat_positions=[statpos,]) -times=tec['times'] -flags=tec['flags']['st1'] -timess=[tm/(3600*24.) for tm in times] -dates=tab.taql('calc ctod($timess)') +statpos = gt.PosTools.posCS002 +pointing = array([2.15374123, 0.8415521]) # 3C196 +# pointing=array([3.7146860578925645, 0.9111636804140731 ]) #3C295 +# tec=gt.getRM(ionexPath='/home/users/mevius/IONEXdata/',earth_rot=0,ha_limit=1*np.pi,radec=pointing,timestep=300, timerange = [a, b],stat_positions=[statpos,],server="ftp://gnss.oma.be/gnss/products/IONEX/",prefix="ROBR") +# tec2=gt.getRM(ionexPath='/home/mevius/IONEXdata/',earth_rot=0,ha_limit=1*np.pi,radec=pointing,timestep=300, timerange = [a, b],stat_positions=[statpos,],prefix='iltg') +tec3 = gt.getRM( + ionexPath="/home/users/mevius/IONEXdata/", + server="ftp://igs-final.man.olsztyn.pl/pub/gps_data/GPS_IONO/cmpcmb/", + prefix="igsg", + earth_rot=1, + radec=pointing, + timestep=150, + timerange=[a, b + 150], + stat_positions=[ + statpos, + ], +) +tec2 = gt.getRM( + ionexPath="/home/users/mevius/IONEXdata/", + server="ftp://213.184.6.172/home/gnss/products/ionex/", + earth_rot=0.5, + ha_limit=1 * np.pi, + radec=pointing, + timestep=150, + timerange=[a, b + 150], + stat_positions=[ + statpos, + ], + prefix="ILTF", +) +tec = gt.getRM( + ionexPath="/home/users/mevius/IONEXdata/", + server="ftp://213.184.6.172/home/gnss/products/ionex/", + earth_rot=0.5, + ha_limit=1 * np.pi, + radec=pointing, + timestep=150, + timerange=[a, b + 150], + stat_positions=[ + statpos, + ], + prefix="ILTQ", +) +# tec3=gt.getRM(ionexPath='/home/mevius/IONEXdata/',earth_rot=1,ha_limit=1*np.pi,radec=pointing,timestep=100, timerange = [a, b],stat_positions=[statpos,]) +times = tec["times"] +flags = tec["flags"]["st1"] +timess = [tm / (3600 * 24.0) for tm in times] +dates = tab.taql("calc ctod($timess)") -myf=open("/home/users/mevius/RMextract/examples/dataMB2.txt","r") -dataMB2=[[float(i) for i in j.split()] for j in myf] -dataMB2=array(dataMB2) +myf = open("/home/users/mevius/RMextract/examples/dataMB2.txt", "r") +dataMB2 = [[float(i) for i in j.split()] for j in myf] +dataMB2 = array(dataMB2) -rtec2=np.average(tec2['RM']['st1'].reshape((-1,4)),axis=1) -rtec=np.average(tec['RM']['st1'].reshape((-1,4)),axis=1) -rtec3=np.average(tec3['RM']['st1'].reshape((-1,4)),axis=1) +rtec2 = np.average(tec2["RM"]["st1"].reshape((-1, 4)), axis=1) +rtec = np.average(tec["RM"]["st1"].reshape((-1, 4)), axis=1) +rtec3 = np.average(tec3["RM"]["st1"].reshape((-1, 4)), axis=1) -if 'array' in dates.keys(): - dates=dates['array'] +if "array" in dates.keys(): + dates = dates["array"] else: - dates=dates[dates.keys()[0]] #backward compatibility with older casacore vresions + dates = dates[ + dates.keys()[0] + ] # backward compatibility with older casacore vresions -format="%Y/%m/%d/%H:%M:%S.%f" -mydatetimes=[datetime.datetime.strptime(mydate,format) for mydate in dates] -maskeddata=np.ma.array(tec2['RM']['st1'],mask=np.logical_not(flags)) -plot_date(mydatetimes,maskeddata,'-') -maskeddata=np.ma.array(tec['RM']['st1'],mask=np.logical_not(flags)) -plot_date(mydatetimes,maskeddata,'-') -maskeddata=np.ma.array(tec3['RM']['st1'],mask=np.logical_not(flags)) -plot_date(mydatetimes,maskeddata,'-') +format = "%Y/%m/%d/%H:%M:%S.%f" +mydatetimes = [datetime.datetime.strptime(mydate, format) for mydate in dates] +maskeddata = np.ma.array(tec2["RM"]["st1"], mask=np.logical_not(flags)) +plot_date(mydatetimes, maskeddata, "-") +maskeddata = np.ma.array(tec["RM"]["st1"], mask=np.logical_not(flags)) +plot_date(mydatetimes, maskeddata, "-") +maskeddata = np.ma.array(tec3["RM"]["st1"], mask=np.logical_not(flags)) +plot_date(mydatetimes, maskeddata, "-") plt.gcf().autofmt_xdate() ylabel("RM (rad/m^2)") -#title("RM variation direction 3C196 2015/07/22") +# title("RM variation direction 3C196 2015/07/22") title("RM variation direction 3C196 2013/03/02") figure(2) -plot_date(mydatetimes,tec2['RM']['st1']-np.average(rtec2-dataMB2[:,1]),'b-') -plot_date(mydatetimes,tec['RM']['st1']-np.average(rtec-dataMB2[:,1]),'g-') -plot_date(mydatetimes,tec3['RM']['st1']-np.average(rtec3-dataMB2[:,1]),'r-') -plot_date(mydatetimes[2::4],dataMB2[:,1],'ko') -plot_date(mydatetimes[2::4],dataMB2[:,1],'k-') -legend(['ILTF','ILTQ','IGSG','LOFAR']) +plot_date(mydatetimes, tec2["RM"]["st1"] - np.average(rtec2 - dataMB2[:, 1]), "b-") +plot_date(mydatetimes, tec["RM"]["st1"] - np.average(rtec - dataMB2[:, 1]), "g-") +plot_date(mydatetimes, tec3["RM"]["st1"] - np.average(rtec3 - dataMB2[:, 1]), "r-") +plot_date(mydatetimes[2::4], dataMB2[:, 1], "ko") +plot_date(mydatetimes[2::4], dataMB2[:, 1], "k-") +legend(["ILTF", "ILTQ", "IGSG", "LOFAR"]) ylabel("RM rad/m^2") figure(3) -#plot_date(mydatetimes[2::4],dataMB2[:,1],'-') -plot_date(mydatetimes,tec2['STEC']['st1']/tec2['AirMass']['st1'],'-') -plot_date(mydatetimes,tec['STEC']['st1']/tec3['AirMass']['st1'],'-') -plot_date(mydatetimes,tec3['STEC']['st1']/tec['AirMass']['st1'],'-') -legend(['ILTG','ILTQ','IGSG']) +# plot_date(mydatetimes[2::4],dataMB2[:,1],'-') +plot_date(mydatetimes, tec2["STEC"]["st1"] / tec2["AirMass"]["st1"], "-") +plot_date(mydatetimes, tec["STEC"]["st1"] / tec3["AirMass"]["st1"], "-") +plot_date(mydatetimes, tec3["STEC"]["st1"] / tec["AirMass"]["st1"], "-") +legend(["ILTG", "ILTQ", "IGSG"]) ylabel("vTEC (TECU)") figure(4) -#plot_date(mydatetimes[2::4],tec2['RM']['st1'][2::4]-dataMB2[:,1]-np.average(tec2['RM']['st1'][2::4]-dataMB2[:,1]),'b-') -#plot_date(mydatetimes[2::4],tec['RM']['st1'][2::4]-dataMB2[:,1]-np.average(tec3['RM']['st1'][2::4]-dataMB2[:,1]),'g-') -#plot_date(mydatetimes[2::4],tec3['RM']['st1'][2::4]-dataMB2[:,1]-np.average(tec['RM']['st1'][2::4]-dataMB2[:,1]),'r-') -plot_date(mydatetimes[2::4],rtec2-dataMB2[:,1]-np.average(rtec2-dataMB2[:,1]),'b-') -plot_date(mydatetimes[2::4],rtec-dataMB2[:,1]-np.average(rtec-dataMB2[:,1]),'g-') -plot_date(mydatetimes[2::4],rtec3-dataMB2[:,1]-np.average(rtec3-dataMB2[:,1]),'r-') -legend(['ILTG','ILTQ','IGSG']) +# plot_date(mydatetimes[2::4],tec2['RM']['st1'][2::4]-dataMB2[:,1]-np.average(tec2['RM']['st1'][2::4]-dataMB2[:,1]),'b-') +# plot_date(mydatetimes[2::4],tec['RM']['st1'][2::4]-dataMB2[:,1]-np.average(tec3['RM']['st1'][2::4]-dataMB2[:,1]),'g-') +# plot_date(mydatetimes[2::4],tec3['RM']['st1'][2::4]-dataMB2[:,1]-np.average(tec['RM']['st1'][2::4]-dataMB2[:,1]),'r-') +plot_date( + mydatetimes[2::4], rtec2 - dataMB2[:, 1] - np.average(rtec2 - dataMB2[:, 1]), "b-" +) +plot_date( + mydatetimes[2::4], rtec - dataMB2[:, 1] - np.average(rtec - dataMB2[:, 1]), "g-" +) +plot_date( + mydatetimes[2::4], rtec3 - dataMB2[:, 1] - np.average(rtec3 - dataMB2[:, 1]), "r-" +) +legend(["ILTG", "ILTQ", "IGSG"]) ylabel("RM rad/m^2") title("differential RM GPS-LOFAR") show() diff --git a/examples/example_get_tec.py b/examples/example_get_tec.py index e1a3de9..365535c 100644 --- a/examples/example_get_tec.py +++ b/examples/example_get_tec.py @@ -3,30 +3,43 @@ import RMextract.getTEC as gt -a=tab.taql('calc MJD("2015/08/14/00:00:00")')[0]*3600*24 -b=tab.taql('calc MJD("2015/08/15/23:50:00")')[0]*3600*24 +a = tab.taql('calc MJD("2015/08/14/00:00:00")')[0] * 3600 * 24 +b = tab.taql('calc MJD("2015/08/15/23:50:00")')[0] * 3600 * 24 -statpos=gt.PosTools.posCS002 -pointing=array([ 2.15374123, 0.8415521 ]) #3C196 -#ra=0. -#dec=0.5*np.pi -ra=pointing[0] -dec=pointing[1] -#tec=gt.getTEC(ionexPath='./IONEXdata',radec=[ra,dec],timestep=300, timerange = [a, b],stat_positions=[statpos,],ha_limit=np.pi) -tec=gt.getTEC(ionexPath='./IONEXdata',radec=[ra,dec],timestep=300, timerange = [a, b],stat_positions=[statpos,],ha_limit=np.pi,server="ftp://gnss.oma.be/gnss/products/IONEX/",prefix="ROBR") +statpos = gt.PosTools.posCS002 +pointing = array([2.15374123, 0.8415521]) # 3C196 +# ra=0. +# dec=0.5*np.pi +ra = pointing[0] +dec = pointing[1] +# tec=gt.getTEC(ionexPath='./IONEXdata',radec=[ra,dec],timestep=300, timerange = [a, b],stat_positions=[statpos,],ha_limit=np.pi) +tec = gt.getTEC( + ionexPath="./IONEXdata", + radec=[ra, dec], + timestep=300, + timerange=[a, b], + stat_positions=[ + statpos, + ], + ha_limit=np.pi, + server="ftp://gnss.oma.be/gnss/products/IONEX/", + prefix="ROBR", +) -times=tec[0] -timess=[tm/(3600*24.) for tm in times] -dates=tab.taql('calc ctod($timess)') -if 'array' in dates.keys(): - dates=dates['array'] +times = tec[0] +timess = [tm / (3600 * 24.0) for tm in times] +dates = tab.taql("calc ctod($timess)") +if "array" in dates.keys(): + dates = dates["array"] else: - dates=dates[dates.keys()[0]] #backward compatibility with older casacore vresions -format="%Y/%m/%d/%H:%M:%S.%f" -mydatetimes=[datetime.datetime.strptime(mydate,format) for mydate in dates] -flags=tec[-1]['st1'] -flaggedtec=np.ma.array(tec[2]['st1'],mask=np.logical_not (flags)) -plot_date(mydatetimes,flaggedtec) + dates = dates[ + dates.keys()[0] + ] # backward compatibility with older casacore vresions +format = "%Y/%m/%d/%H:%M:%S.%f" +mydatetimes = [datetime.datetime.strptime(mydate, format) for mydate in dates] +flags = tec[-1]["st1"] +flaggedtec = np.ma.array(tec[2]["st1"], mask=np.logical_not(flags)) +plot_date(mydatetimes, flaggedtec) plt.gcf().autofmt_xdate() ylabel("VTEC (TECU)") show() diff --git a/examples/getB_raytrace.py b/examples/getB_raytrace.py index e044a5a..7808cfe 100644 --- a/examples/getB_raytrace.py +++ b/examples/getB_raytrace.py @@ -8,64 +8,89 @@ from RMextract.EMM import EMM as EMM -def getPParray(pointing,time,position,height_array): - az,el = PosTools.getAzEl(pointing,time,position) - lonlat=PosTools.getLonLatStation(az,el,pos=position) - los_dir=[lonlat['m0']['value'],lonlat['m1']['value']] - lat=los_dir[1] - lon=los_dir[0] - itrfdir=[np.cos(lat)*np.cos(lon),np.cos(lat)*np.sin(lon),np.sin(lat)] - pp,am=PosTools.getPPsimpleAngle(height=height_array,mPosition=position,direction=itrfdir) - return pp,am +def getPParray(pointing, time, position, height_array): + az, el = PosTools.getAzEl(pointing, time, position) + lonlat = PosTools.getLonLatStation(az, el, pos=position) + los_dir = [lonlat["m0"]["value"], lonlat["m1"]["value"]] + lat = los_dir[1] + lon = los_dir[0] + itrfdir = [np.cos(lat) * np.cos(lon), np.cos(lat) * np.sin(lon), np.sin(lat)] + pp, am = PosTools.getPPsimpleAngle( + height=height_array, mPosition=position, direction=itrfdir + ) + return pp, am -def getBarray(pointing,time,position,height_array): - pp,am=getPParray(pointing,time,position,height_array) - year, month, day, myfrac = PosTools.obtain_observation_year_month_day_fraction(time) - dayofyear = date(year,month,day).timetuple().tm_yday - emm= EMM.WMM(date=year + float(dayofyear) / 365.) - BField=emm.getProjectedFieldArray(np.degrees(pp[:,0]),np.degrees(pp[:,1]),pp[:,2]/1e3,los_dir) - return pp,am,BField +def getBarray(pointing, time, position, height_array): + pp, am = getPParray(pointing, time, position, height_array) + year, month, day, myfrac = PosTools.obtain_observation_year_month_day_fraction(time) + dayofyear = date(year, month, day).timetuple().tm_yday + emm = EMM.WMM(date=year + float(dayofyear) / 365.0) + BField = emm.getProjectedFieldArray( + np.degrees(pp[:, 0]), np.degrees(pp[:, 1]), pp[:, 2] / 1e3, los_dir + ) + return pp, am, BField -def getTECarray(pp,time,server="ftp://igs-final.man.olsztyn.pl/pub/gps_data/GPS_IONO/cmpcmb/",prefix="igsg",earth_rot=0,ionexPath="/home/users/mevius/IONEXdata/"): - date_parms = PosTools.obtain_observation_year_month_day_fraction(time) - part_of_day= date_parms[3] * 24 - #get relevant ionex file - ionexf=ionex.getIONEXfile(time=date_parms,server=server,prefix=prefix,outpath=ionexPath) - tecinfo=ionex.readTEC(ionexf) - vtecs=[] - for latpp,lonpp in zip(np.degrees(pp[:,1]),np.degrees(pp[:,0])): - vTEC=ionex.getTECinterpol(time=part_of_day,lat=latpp,lon=lonpp,tecinfo=tecinfo,apply_earth_rotation=earth_rot) + +def getTECarray( + pp, + time, + server="ftp://igs-final.man.olsztyn.pl/pub/gps_data/GPS_IONO/cmpcmb/", + prefix="igsg", + earth_rot=0, + ionexPath="/home/users/mevius/IONEXdata/", +): + date_parms = PosTools.obtain_observation_year_month_day_fraction(time) + part_of_day = date_parms[3] * 24 + # get relevant ionex file + ionexf = ionex.getIONEXfile( + time=date_parms, server=server, prefix=prefix, outpath=ionexPath + ) + tecinfo = ionex.readTEC(ionexf) + vtecs = [] + for latpp, lonpp in zip(np.degrees(pp[:, 1]), np.degrees(pp[:, 0])): + vTEC = ionex.getTECinterpol( + time=part_of_day, + lat=latpp, + lon=lonpp, + tecinfo=tecinfo, + apply_earth_rotation=earth_rot, + ) vtecs.append(vTEC) return np.array(vtecs) -def getRM_raytrace(time,pointing,position): - heights=np.arange(50e3,1000e3,10e3) - pp,am,BField=getBarray(pointing,time,position,heights) - year, month, day, myfrac = PosTools.obtain_observation_year_month_day_fraction(time) +def getRM_raytrace(time, pointing, position): + heights = np.arange(50e3, 1000e3, 10e3) + pp, am, BField = getBarray(pointing, time, position, heights) + year, month, day, myfrac = PosTools.obtain_observation_year_month_day_fraction(time) + + vtecs = getTECarray(pp, time) + myiri = pyiri.pyiri(year=year, month=month, day=day, hour=myfrac) + dprofile = [] + for lon, lat, h in zip( + np.degrees(pp[:, 0]), np.degrees(pp[:, 1]), pp[:, 2] / 1.0e3 + ): + myiri.lon = lon + myiri.lat = lat + dprofile.append(myiri.get_profile(hstart=h, hend=h, hstep=1)) + # dprofile=myiri.iri_sub(flags,jmag=0,alati=52.,along=6.,iyyyy=2000,mmdd=101,dhour=1.5,heibeg=100.,heiend=1000.,heistp=10.) + return pp, am, BField, vtecs, dprofile - vtecs=getTECarray(pp,time) - myiri=pyiri.pyiri(year=year,month=month,day=day,hour=myfrac) - dprofile=[] - for lon,lat,h in zip(np.degrees(pp[:,0]),np.degrees(pp[:,1]),pp[:,2]/1.e3): - myiri.lon=lon - myiri.lat=lat - dprofile.append(myiri.get_profile(hstart=h,hend=h,hstep=1)) - #dprofile=myiri.iri_sub(flags,jmag=0,alati=52.,along=6.,iyyyy=2000,mmdd=101,dhour=1.5,heibeg=100.,heiend=1000.,heistp=10.) - return pp,am,BField,vtecs,dprofile -def getTEC_iri(time,pointing,position): - heights=np.array([300e3]) - pp,am=getPParray(pointing,time,position,heights) - year, month, day, myfrac = PosTools.obtain_observation_year_month_day_fraction(time) - print ("getting data for",year, month, day, myfrac) - vtecs=getTECarray(pp,time) - myiri=pyiri.pyiri(year=year,month=month,day=day,hour=myfrac) - iri_tec=[] - for lon,lat,h in zip(np.degrees(pp[:,0]),np.degrees(pp[:,1]),pp[:,2]/1.e3): - myiri.lon=lon - myiri.lat=lat +def getTEC_iri(time, pointing, position): + heights = np.array([300e3]) + pp, am = getPParray(pointing, time, position, heights) + year, month, day, myfrac = PosTools.obtain_observation_year_month_day_fraction(time) + print("getting data for", year, month, day, myfrac) + vtecs = getTECarray(pp, time) + myiri = pyiri.pyiri(year=year, month=month, day=day, hour=myfrac) + iri_tec = [] + for lon, lat, h in zip( + np.degrees(pp[:, 0]), np.degrees(pp[:, 1]), pp[:, 2] / 1.0e3 + ): + myiri.lon = lon + myiri.lat = lat iri_tec.append(myiri.get_tec()[0]) - #dprofile=myiri.iri_sub(flags,jmag=0,alati=52.,along=6.,iyyyy=2000,mmdd=101,dhour=1.5,heibeg=100.,heiend=1000.,heistp=10.) - return pp,am,vtecs,np.array(iri_tec) + # dprofile=myiri.iri_sub(flags,jmag=0,alati=52.,along=6.,iyyyy=2000,mmdd=101,dhour=1.5,heibeg=100.,heiend=1000.,heistp=10.) + return pp, am, vtecs, np.array(iri_tec) diff --git a/examples/get_RM_iri.py b/examples/get_RM_iri.py index df83836..a8cbe96 100644 --- a/examples/get_RM_iri.py +++ b/examples/get_RM_iri.py @@ -1,6 +1,6 @@ import astropy.units as u import numpy as np -from astropy.coordinates import AltAz, Angle, EarthLocation, Latitude, SkyCoord +from astropy.coordinates import AltAz, EarthLocation, SkyCoord from astropy.time import Time from lofarantpos import db, geo @@ -9,109 +9,157 @@ import RMextract.PosTools as pt import RMextract.pyiriplas.pyiriplas as pyiriplas -mydb=db.LofarAntennaDatabase() +mydb = db.LofarAntennaDatabase() nenufarcentre_geo = (np.deg2rad(2.192400), np.deg2rad(47.376511), 150) nenufarcentre_xyz = geo.xyz_from_geographic(*nenufarcentre_geo) -nenufarcentre_xyz = [4324017.054,165545.160 ,4670271.072] -#ionex_server="ftp://ftp.aiub.unibe.ch/CODE/" +nenufarcentre_xyz = [4324017.054, 165545.160, 4670271.072] +# ionex_server="ftp://ftp.aiub.unibe.ch/CODE/" # ionex_server = "ftp://cddis.nasa.gov/gnss/products/ionex/" ionex_server = "ftp://gssc.esa.int/gnss/products/ionex/" -#ionex_prefix='UQRG' -ionex_prefix='CODG' -ionexPath="/home/mevius/IONEX_DATA/" +# ionex_prefix='UQRG' +ionex_prefix = "CODG" +ionexPath = "/home/mevius/IONEX_DATA/" earth_rot = 0 -light_speed=299792458. - - - -def init_Meerkat(src = "00:34:08.8703 -07:21:53.409", times =[58774.9430718395, - 59034.0376808637, - 59064.9741027126, - 59090.8953866498] ): - XYZ_Meerkat = [5109360.133,2006852.586,-3238948.127] - #statpos = EarthLocation.from_geodetic(Angle((21,19,48.00),u.deg),Latitude((-30,49,48.0),u.deg)) - statpos = EarthLocation.from_geocentric(*XYZ_Meerkat,u.m) - statposarray = np.array([[statpos.x.value,statpos.y.value,statpos.z.value]]*len(times) ) - srcpos = SkyCoord(src, unit=(u.hourangle,u.deg),frame="fk5") - atimes = [Time(i,format='mjd') for i in times] - - altazdir = [ srcpos.transform_to(AltAz(obstime = itime, location = statpos)) for itime in atimes ] - itrfdir = [i.transform_to('itrs') for i in altazdir] - direction = np.array([ [i.x,i.y,i.z] for i in itrfdir]).T - return statposarray,srcpos,direction,atimes - - - -def init_from_file(fname,src ="05:28:52.264 +22:00:04"): - data = np.loadtxt(fname,usecols=[0,1,2,3,4,5,6]) - stations = np.loadtxt(fname,usecols=[7],dtype=str) - statpos = [ "CS002LBA" if i=="LOFAR" else i+"HBA" for i in stations] - statpos=[EarthLocation.from_geocentric(*mydb.phase_centres[i],unit=u.m) for i in statpos] - statposarray = np.array([[i.x.value,i.y.value,i.z.value] for i in statpos]) - srcpos = SkyCoord(src, unit=(u.hourangle,u.deg),frame="fk5") - atimes = Time(data[:,0],format='mjd') - altazdir = [ srcpos.transform_to(AltAz(obstime = itime, location = pos)) for pos,itime in zip(statpos,atimes) ] - itrfdir = [i.transform_to('itrs') for i in altazdir] - direction = np.array([ [i.x,i.y,i.z] for i in itrfdir]).T - return statposarray,srcpos,direction,atimes - -def init_from_time_file(fname,src = "10:22:57.9992 +10:01:52.78"): - tms = np.loadtxt(fname,usecols=[1]) - stations = [fname.split("/")[-1][:5],] - statpos = [ "CS002LBA" if i=="LOFAR" else i+"HBA" for i in stations]*tms.shape[0] - statpos=[EarthLocation.from_geocentric(*mydb.phase_centres[i],unit=u.m) for i in statpos] - statposarray = np.array([[i.x.value,i.y.value,i.z.value] for i in statpos]) - srcpos = SkyCoord(src, unit=(u.hourangle,u.deg),frame="fk5") - atimes = Time(tms,format='mjd') - altazdir = [ srcpos.transform_to(AltAz(obstime = itime, location = pos)) for pos,itime in zip(statpos,atimes) ] - itrfdir = [i.transform_to('itrs') for i in altazdir] - direction = np.array([ [i.x,i.y,i.z] for i in itrfdir]).T - return statposarray,srcpos,direction,atimes - -def init_from_nat_file(fname,src = "10:22:57.9992 +10:01:52.78",skiprows = 0,stations = None): - tms = np.loadtxt(fname,usecols=[0],skiprows = skiprows) +light_speed = 299792458.0 + + +def init_Meerkat( + src="00:34:08.8703 -07:21:53.409", + times=[58774.9430718395, 59034.0376808637, 59064.9741027126, 59090.8953866498], +): + XYZ_Meerkat = [5109360.133, 2006852.586, -3238948.127] + # statpos = EarthLocation.from_geodetic(Angle((21,19,48.00),u.deg),Latitude((-30,49,48.0),u.deg)) + statpos = EarthLocation.from_geocentric(*XYZ_Meerkat, u.m) + statposarray = np.array( + [[statpos.x.value, statpos.y.value, statpos.z.value]] * len(times) + ) + srcpos = SkyCoord(src, unit=(u.hourangle, u.deg), frame="fk5") + atimes = [Time(i, format="mjd") for i in times] + + altazdir = [ + srcpos.transform_to(AltAz(obstime=itime, location=statpos)) for itime in atimes + ] + itrfdir = [i.transform_to("itrs") for i in altazdir] + direction = np.array([[i.x, i.y, i.z] for i in itrfdir]).T + return statposarray, srcpos, direction, atimes + + +def init_from_file(fname, src="05:28:52.264 +22:00:04"): + data = np.loadtxt(fname, usecols=[0, 1, 2, 3, 4, 5, 6]) + stations = np.loadtxt(fname, usecols=[7], dtype=str) + statpos = ["CS002LBA" if i == "LOFAR" else i + "HBA" for i in stations] + statpos = [ + EarthLocation.from_geocentric(*mydb.phase_centres[i], unit=u.m) for i in statpos + ] + statposarray = np.array([[i.x.value, i.y.value, i.z.value] for i in statpos]) + srcpos = SkyCoord(src, unit=(u.hourangle, u.deg), frame="fk5") + atimes = Time(data[:, 0], format="mjd") + altazdir = [ + srcpos.transform_to(AltAz(obstime=itime, location=pos)) + for pos, itime in zip(statpos, atimes) + ] + itrfdir = [i.transform_to("itrs") for i in altazdir] + direction = np.array([[i.x, i.y, i.z] for i in itrfdir]).T + return statposarray, srcpos, direction, atimes + + +def init_from_time_file(fname, src="10:22:57.9992 +10:01:52.78"): + tms = np.loadtxt(fname, usecols=[1]) + stations = [ + fname.split("/")[-1][:5], + ] + statpos = ["CS002LBA" if i == "LOFAR" else i + "HBA" for i in stations] * tms.shape[ + 0 + ] + statpos = [ + EarthLocation.from_geocentric(*mydb.phase_centres[i], unit=u.m) for i in statpos + ] + statposarray = np.array([[i.x.value, i.y.value, i.z.value] for i in statpos]) + srcpos = SkyCoord(src, unit=(u.hourangle, u.deg), frame="fk5") + atimes = Time(tms, format="mjd") + altazdir = [ + srcpos.transform_to(AltAz(obstime=itime, location=pos)) + for pos, itime in zip(statpos, atimes) + ] + itrfdir = [i.transform_to("itrs") for i in altazdir] + direction = np.array([[i.x, i.y, i.z] for i in itrfdir]).T + return statposarray, srcpos, direction, atimes + + +def init_from_nat_file( + fname, src="10:22:57.9992 +10:01:52.78", skiprows=0, stations=None +): + tms = np.loadtxt(fname, usecols=[0], skiprows=skiprows) if stations is None: - stations = [fname.split("/")[-2][:5],] - statpos = [ "CS002LBA" if i=="LOFAR" else i+"HBA" for i in stations]*tms.shape[0] - statpos=[EarthLocation.from_geocentric(*mydb.phase_centres[i],unit=u.m) for i in statpos] - statposarray = np.array([[i.x.value,i.y.value,i.z.value] for i in statpos]) - srcpos = SkyCoord(src, unit=(u.hourangle,u.deg),frame="fk5") - atimes = Time(tms,format='mjd') - altazdir = [ srcpos.transform_to(AltAz(obstime = itime, location = pos)) for pos,itime in zip(statpos,atimes) ] - itrfdir = [i.transform_to('itrs') for i in altazdir] - direction = np.array([ [i.x,i.y,i.z] for i in itrfdir]).T - return statposarray,srcpos,direction,atimes - -def init_from_louis_file(fname,srqc = "10:22:57.9992 +10:01:52.78"): + stations = [ + fname.split("/")[-2][:5], + ] + statpos = ["CS002LBA" if i == "LOFAR" else i + "HBA" for i in stations] * tms.shape[ + 0 + ] + statpos = [ + EarthLocation.from_geocentric(*mydb.phase_centres[i], unit=u.m) for i in statpos + ] + statposarray = np.array([[i.x.value, i.y.value, i.z.value] for i in statpos]) + srcpos = SkyCoord(src, unit=(u.hourangle, u.deg), frame="fk5") + atimes = Time(tms, format="mjd") + altazdir = [ + srcpos.transform_to(AltAz(obstime=itime, location=pos)) + for pos, itime in zip(statpos, atimes) + ] + itrfdir = [i.transform_to("itrs") for i in altazdir] + direction = np.array([[i.x, i.y, i.z] for i in itrfdir]).T + return statposarray, srcpos, direction, atimes + + +def init_from_louis_file(fname, srqc="10:22:57.9992 +10:01:52.78"): tms = np.loadtxt(fname)[0] - stations = [nenufarcentre_xyz ]*tms.shape[0] - statpos=[EarthLocation.from_geocentric(*i,unit=u.m) for i in stations] - statposarray = np.array([[i.x.value,i.y.value,i.z.value] for i in statpos]) - srcpos = SkyCoord(src, unit=(u.hourangle,u.deg),frame="fk5") - atimes = Time(tms,format='mjd') - altazdir = [ srcpos.transform_to(AltAz(obstime = itime, location = pos)) for pos,itime in zip(statpos,atimes) ] - itrfdir = [i.transform_to('itrs') for i in altazdir] - direction = np.array([ [i.x,i.y,i.z] for i in itrfdir]).T - return statposarray,srcpos,direction,atimes - -hstart=60 -hmiddle=800 -hend=20200 -hstep1=10 -hstep2=100 -hstep1=hstep2=60 -#heights = 450.e3*np.ones(mydir.shape[1:]) -h = np.arange(hstart*1e3,hmiddle*1e3+0.5*hstep1*1e3,hstep1*1e3) + stations = [nenufarcentre_xyz] * tms.shape[0] + statpos = [EarthLocation.from_geocentric(*i, unit=u.m) for i in stations] + statposarray = np.array([[i.x.value, i.y.value, i.z.value] for i in statpos]) + srcpos = SkyCoord(src, unit=(u.hourangle, u.deg), frame="fk5") + atimes = Time(tms, format="mjd") + altazdir = [ + srcpos.transform_to(AltAz(obstime=itime, location=pos)) + for pos, itime in zip(statpos, atimes) + ] + itrfdir = [i.transform_to("itrs") for i in altazdir] + direction = np.array([[i.x, i.y, i.z] for i in itrfdir]).T + return statposarray, srcpos, direction, atimes + + +hstart = 60 +hmiddle = 800 +hend = 20200 +hstep1 = 10 +hstep2 = 100 +hstep1 = hstep2 = 60 +# heights = 450.e3*np.ones(mydir.shape[1:]) +h = np.arange(hstart * 1e3, hmiddle * 1e3 + 0.5 * hstep1 * 1e3, hstep1 * 1e3) idx_hbot = h.shape[0] -h = np.concatenate((h, np.arange(h[-1]+hstep2*1e3,hend*1e3+0.5*hstep2*1e3,hstep2*1e3))) -hweights = np.concatenate((hstep1*np.ones(idx_hbot), hstep2*np.ones(h.shape[0]-idx_hbot))) - - -def getRM_iri(times, statposarray,directions,heights = h,ionex_server = ionex_server ,ionex_prefix = "uqrg",ionexPath = "/home/mevius/IONEX_DATA/",return_short=True,alt_ionex_prefix='uprg'): +h = np.concatenate( + (h, np.arange(h[-1] + hstep2 * 1e3, hend * 1e3 + 0.5 * hstep2 * 1e3, hstep2 * 1e3)) +) +hweights = np.concatenate( + (hstep1 * np.ones(idx_hbot), hstep2 * np.ones(h.shape[0] - idx_hbot)) +) + + +def getRM_iri( + times, + statposarray, + directions, + heights=h, + ionex_server=ionex_server, + ionex_prefix="uqrg", + ionexPath="/home/mevius/IONEX_DATA/", + return_short=True, + alt_ionex_prefix="uprg", +): h = heights - hidx = np.argmin(np.abs(h-250e3)) - londir = np.arctan2(directions[1],directions[0]) + hidx = np.argmin(np.abs(h - 250e3)) + londir = np.arctan2(directions[1], directions[0]) latdir = np.arcsin(directions[2]) pps = [] vtecs = [] @@ -120,91 +168,154 @@ def getRM_iri(times, statposarray,directions,heights = h,ionex_server = ionex_se profiles = [] plasprofiles = [] topprofiles = [] - - for itime,(time,statpos) in enumerate(zip(times,statposarray)): - '''get (lon,lat,h values) of piercepoints for antenna position mPosition in m, direction ITRF in m on unit sphere and for array of heights, assuming a spherical Earth''' - print (itime,time) - pp,am = pt.getPPsimpleAngle(height=h,mPosition=statpos,direction=directions[:,itime]) + + for itime, (time, statpos) in enumerate(zip(times, statposarray)): + """get (lon,lat,h values) of piercepoints for antenna position mPosition in m, direction ITRF in m on unit sphere and for array of heights, assuming a spherical Earth""" + print(itime, time) + pp, am = pt.getPPsimpleAngle( + height=h, mPosition=statpos, direction=directions[:, itime] + ) try: - print("trying here",ionex_prefix) - ionexf=ionex.getIONEXfile(time=time.ymdhms,server=ionex_server,prefix=ionex_prefix,outpath=ionexPath) - tecinfo=ionex.readTEC(ionexf) + print("trying here", ionex_prefix) + ionexf = ionex.getIONEXfile( + time=time.ymdhms, + server=ionex_server, + prefix=ionex_prefix, + outpath=ionexPath, + ) + tecinfo = ionex.readTEC(ionexf) except: try: - print("failed trying",alt_ionex_prefix) - ionexf=ionex.getIONEXfile(time=time.ymdhms,server=ionex_server,prefix=alt_ionex_prefix,outpath=ionexPath) - tecinfo=ionex.readTEC(ionexf) + print("failed trying", alt_ionex_prefix) + ionexf = ionex.getIONEXfile( + time=time.ymdhms, + server=ionex_server, + prefix=alt_ionex_prefix, + outpath=ionexPath, + ) + tecinfo = ionex.readTEC(ionexf) except: try: print("failed trying igsg") - ionexf=ionex.getIONEXfile(time=time.ymdhms,server=ionex_server,prefix="igsg",outpath=ionexPath) - tecinfo=ionex.readTEC(ionexf) + ionexf = ionex.getIONEXfile( + time=time.ymdhms, + server=ionex_server, + prefix="igsg", + outpath=ionexPath, + ) + tecinfo = ionex.readTEC(ionexf) except: print("last trying codg") - ionexf=ionex.getIONEXfile(time=time.ymdhms,server=ionex_server,prefix="codg",outpath=ionexPath) - tecinfo=ionex.readTEC(ionexf) + ionexf = ionex.getIONEXfile( + time=time.ymdhms, + server=ionex_server, + prefix="codg", + outpath=ionexPath, + ) + tecinfo = ionex.readTEC(ionexf) print(ionexf) - lonpp = np.degrees(pp[:,0]) - latpp = np.degrees(pp[:,1]) - vTEC=ionex.getTECinterpol(time=np.resize((time.mjd - int(time.mjd))*24,latpp.shape),lat=latpp,lon=lonpp,tecinfo=tecinfo,apply_earth_rotation=earth_rot) + lonpp = np.degrees(pp[:, 0]) + latpp = np.degrees(pp[:, 1]) + vTEC = ionex.getTECinterpol( + time=np.resize((time.mjd - int(time.mjd)) * 24, latpp.shape), + lat=latpp, + lon=lonpp, + tecinfo=tecinfo, + apply_earth_rotation=earth_rot, + ) vtecs.append(vTEC) - emm=EMM.WMM(date=time.decimalyear,lon=lonpp[hidx],lat=latpp[hidx],h=h[hidx]*1e-3) + emm = EMM.WMM( + date=time.decimalyear, lon=lonpp[hidx], lat=latpp[hidx], h=h[hidx] * 1e-3 + ) - BField = emm.getProjectedFieldArray(lonpp,latpp,h*1e-3,los_dir=[londir[itime],latdir[itime]]) + BField = emm.getProjectedFieldArray( + lonpp, latpp, h * 1e-3, los_dir=[londir[itime], latdir[itime]] + ) Bpars.append(BField) - # myiri=pyiri.pyiri(year=time.ymdhms.year,month=time.ymdhms.month,day=time.ymdhms.day,hour=time.ymdhms.hour + time.ymdhms.minute/60.) - - # myiri.lon=lonpp[hidx] - # myiri.lat=latpp[hidx] - # profiles.append(myiri.get_hprofile(h*1e-3)) - myiri=pyiriplas.pyiriplas(year=time.ymdhms.year,month=time.ymdhms.month,day=time.ymdhms.day,hour=time.ymdhms.hour + time.ymdhms.minute/60.) - - myiri.lon=lonpp[hidx] - myiri.lat=latpp[hidx] - #plasprofiles.append(myiri.get_profile(h*1e-3)) - plasprofiles.append(np.concatenate((myiri.get_profile(h[:idx_hbot]*1e-3),myiri.get_profile(h[idx_hbot:]*1e-3)))) - print(idx_hbot,plasprofiles[0].shape) + # myiri=pyiri.pyiri(year=time.ymdhms.year,month=time.ymdhms.month,day=time.ymdhms.day,hour=time.ymdhms.hour + time.ymdhms.minute/60.) + + # myiri.lon=lonpp[hidx] + # myiri.lat=latpp[hidx] + # profiles.append(myiri.get_hprofile(h*1e-3)) + myiri = pyiriplas.pyiriplas( + year=time.ymdhms.year, + month=time.ymdhms.month, + day=time.ymdhms.day, + hour=time.ymdhms.hour + time.ymdhms.minute / 60.0, + ) + + myiri.lon = lonpp[hidx] + myiri.lat = latpp[hidx] + # plasprofiles.append(myiri.get_profile(h*1e-3)) + plasprofiles.append( + np.concatenate( + ( + myiri.get_profile(h[:idx_hbot] * 1e-3), + myiri.get_profile(h[idx_hbot:] * 1e-3), + ) + ) + ) + print(idx_hbot, plasprofiles[0].shape) topprofiles.append([]) - for ih in range(0,lonpp.shape[0]): - myiri.lon=lonpp[ih] - myiri.lat=latpp[ih] - topprofiles[-1].append(np.concatenate((myiri.get_profile(h[:idx_hbot]*1e-3),myiri.get_profile(h[idx_hbot:]*1e-3)))) + for ih in range(0, lonpp.shape[0]): + myiri.lon = lonpp[ih] + myiri.lat = latpp[ih] + topprofiles[-1].append( + np.concatenate( + ( + myiri.get_profile(h[:idx_hbot] * 1e-3), + myiri.get_profile(h[idx_hbot:] * 1e-3), + ) + ) + ) ams.append(am) pps.append(pp) vtecs = np.array(vtecs) - Bpars = np.array(Bpars) + Bpars = np.array(Bpars) ams = np.array(ams) pps = np.array(pps) plasprofiles = np.array(plasprofiles) - print (plasprofiles.shape,hweights.shape) + print(plasprofiles.shape, hweights.shape) plasprofiles *= hweights - nplas = plasprofiles/np.sum(plasprofiles,axis=1)[:,np.newaxis] - topprofiles = np.array(topprofiles) *np.diag(hweights) - ntop = topprofiles/np.sum(np.diagonal(topprofiles,0,1,2),axis=1)[:,np.newaxis,np.newaxis] + nplas = plasprofiles / np.sum(plasprofiles, axis=1)[:, np.newaxis] + topprofiles = np.array(topprofiles) * np.diag(hweights) + ntop = ( + topprofiles + / np.sum(np.diagonal(topprofiles, 0, 1, 2), axis=1)[:, np.newaxis, np.newaxis] + ) finalp = [] for k in range(ntop.shape[0]): finalp.append(np.diag(ntop[k])) finalp = np.array(finalp) - - RM = np.sum(-1*vtecs*ams*Bpars[:,:,0]*nplas*2.62e-6,axis=1) - RM2 = np.sum(-1*vtecs*ams*Bpars[:,:,0]*finalp*2.62e-6,axis=1) - RM3 = -1*vtecs[:,hidx]*ams[:,hidx]*Bpars[:,hidx,0]*2.62e-6 + RM = np.sum(-1 * vtecs * ams * Bpars[:, :, 0] * nplas * 2.62e-6, axis=1) + RM2 = np.sum(-1 * vtecs * ams * Bpars[:, :, 0] * finalp * 2.62e-6, axis=1) + RM3 = -1 * vtecs[:, hidx] * ams[:, hidx] * Bpars[:, hidx, 0] * 2.62e-6 if return_short: return RM2 else: - return vtecs,Bpars,ams,finalp,pps,nplas,RM2 - - -def getRM_iri_new(times, statposarray,srcpos,heights = h,ionex_server = ionex_server ,ionex_prefix = "uqrg",ionexPath = "/home/mevius/IONEX_DATA/",return_short=True,alt_ionex_prefix='uprg'): + return vtecs, Bpars, ams, finalp, pps, nplas, RM2 + + +def getRM_iri_new( + times, + statposarray, + srcpos, + heights=h, + ionex_server=ionex_server, + ionex_prefix="uqrg", + ionexPath="/home/mevius/IONEX_DATA/", + return_short=True, + alt_ionex_prefix="uprg", +): h = heights - hidx = np.argmin(np.abs(h-250e3)) - hkm = heights*u.m + hidx = np.argmin(np.abs(h - 250e3)) + hkm = heights * u.m pps = [] vtecs = [] Bpars = [] @@ -212,81 +323,132 @@ def getRM_iri_new(times, statposarray,srcpos,heights = h,ionex_server = ionex_se profiles = [] plasprofiles = [] topprofiles = [] - - for itime,(time,statpos) in enumerate(zip(times,statposarray)): - '''get (lon,lat,h values) of piercepoints for antenna position mPosition in m, sourcepos radec or SkyCoord for array of heights''' - print (itime,time) - #pp,am = pt.getPPsimpleAngle(height=h,mPosition=statpos,direction=directions[:,itime]) - latpp, lonpp, latdir, londir, am = pt.getProfile(srcpos,statpos,time, hkm) + + for itime, (time, statpos) in enumerate(zip(times, statposarray)): + """get (lon,lat,h values) of piercepoints for antenna position mPosition in m, sourcepos radec or SkyCoord for array of heights""" + print(itime, time) + # pp,am = pt.getPPsimpleAngle(height=h,mPosition=statpos,direction=directions[:,itime]) + latpp, lonpp, latdir, londir, am = pt.getProfile(srcpos, statpos, time, hkm) try: - print("trying here",ionex_prefix) - ionexf=ionex.getIONEXfile(time=time.ymdhms,server=ionex_server,prefix=ionex_prefix,outpath=ionexPath) - tecinfo=ionex.readTEC(ionexf) + print("trying here", ionex_prefix) + ionexf = ionex.getIONEXfile( + time=time.ymdhms, + server=ionex_server, + prefix=ionex_prefix, + outpath=ionexPath, + ) + tecinfo = ionex.readTEC(ionexf) except: try: - print("failed trying",alt_ionex_prefix) - ionexf=ionex.getIONEXfile(time=time.ymdhms,server=ionex_server,prefix=alt_ionex_prefix,outpath=ionexPath) - tecinfo=ionex.readTEC(ionexf) + print("failed trying", alt_ionex_prefix) + ionexf = ionex.getIONEXfile( + time=time.ymdhms, + server=ionex_server, + prefix=alt_ionex_prefix, + outpath=ionexPath, + ) + tecinfo = ionex.readTEC(ionexf) except: try: print("failed trying igsg") - ionexf=ionex.getIONEXfile(time=time.ymdhms,server=ionex_server,prefix="igsg",outpath=ionexPath) - tecinfo=ionex.readTEC(ionexf) + ionexf = ionex.getIONEXfile( + time=time.ymdhms, + server=ionex_server, + prefix="igsg", + outpath=ionexPath, + ) + tecinfo = ionex.readTEC(ionexf) except: print("last trying codg") - ionexf=ionex.getIONEXfile(time=time.ymdhms,server=ionex_server,prefix="codg",outpath=ionexPath) - tecinfo=ionex.readTEC(ionexf) + ionexf = ionex.getIONEXfile( + time=time.ymdhms, + server=ionex_server, + prefix="codg", + outpath=ionexPath, + ) + tecinfo = ionex.readTEC(ionexf) print(ionexf) - vTEC=ionex.getTECinterpol(time=np.resize((time.mjd - int(time.mjd))*24,latpp.shape),lat=latpp,lon=lonpp,tecinfo=tecinfo,apply_earth_rotation=earth_rot) + vTEC = ionex.getTECinterpol( + time=np.resize((time.mjd - int(time.mjd)) * 24, latpp.shape), + lat=latpp, + lon=lonpp, + tecinfo=tecinfo, + apply_earth_rotation=earth_rot, + ) vtecs.append(vTEC) - emm=EMM.WMM(date=time.decimalyear,lon=lonpp[hidx],lat=latpp[hidx],h=h[hidx]*1e-3) + emm = EMM.WMM( + date=time.decimalyear, lon=lonpp[hidx], lat=latpp[hidx], h=h[hidx] * 1e-3 + ) - BField = emm.getProjectedFieldArray(lonpp,latpp,h*1e-3,los_dir=[londir,latdir]) + BField = emm.getProjectedFieldArray( + lonpp, latpp, h * 1e-3, los_dir=[londir, latdir] + ) Bpars.append(BField) - # myiri=pyiri.pyiri(year=time.ymdhms.year,month=time.ymdhms.month,day=time.ymdhms.day,hour=time.ymdhms.hour + time.ymdhms.minute/60.) - - # myiri.lon=lonpp[hidx] - # myiri.lat=latpp[hidx] - # profiles.append(myiri.get_hprofile(h*1e-3)) - myiri=pyiriplas.pyiriplas(year=time.ymdhms.year,month=time.ymdhms.month,day=time.ymdhms.day,hour=time.ymdhms.hour + time.ymdhms.minute/60.) - - myiri.lon=lonpp[hidx] - myiri.lat=latpp[hidx] - #plasprofiles.append(myiri.get_profile(h*1e-3)) - plasprofiles.append(np.concatenate((myiri.get_profile(h[:idx_hbot]*1e-3),myiri.get_profile(h[idx_hbot:]*1e-3)))) - print(idx_hbot,plasprofiles[0].shape) + # myiri=pyiri.pyiri(year=time.ymdhms.year,month=time.ymdhms.month,day=time.ymdhms.day,hour=time.ymdhms.hour + time.ymdhms.minute/60.) + + # myiri.lon=lonpp[hidx] + # myiri.lat=latpp[hidx] + # profiles.append(myiri.get_hprofile(h*1e-3)) + myiri = pyiriplas.pyiriplas( + year=time.ymdhms.year, + month=time.ymdhms.month, + day=time.ymdhms.day, + hour=time.ymdhms.hour + time.ymdhms.minute / 60.0, + ) + + myiri.lon = lonpp[hidx] + myiri.lat = latpp[hidx] + # plasprofiles.append(myiri.get_profile(h*1e-3)) + plasprofiles.append( + np.concatenate( + ( + myiri.get_profile(h[:idx_hbot] * 1e-3), + myiri.get_profile(h[idx_hbot:] * 1e-3), + ) + ) + ) + print(idx_hbot, plasprofiles[0].shape) topprofiles.append([]) - for ih in range(0,lonpp.shape[0]): - myiri.lon=lonpp[ih] - myiri.lat=latpp[ih] - topprofiles[-1].append(np.concatenate((myiri.get_profile(h[:idx_hbot]*1e-3),myiri.get_profile(h[idx_hbot:]*1e-3)))) + for ih in range(0, lonpp.shape[0]): + myiri.lon = lonpp[ih] + myiri.lat = latpp[ih] + topprofiles[-1].append( + np.concatenate( + ( + myiri.get_profile(h[:idx_hbot] * 1e-3), + myiri.get_profile(h[idx_hbot:] * 1e-3), + ) + ) + ) ams.append(am) - pps.append([lonpp,latpp,h]) + pps.append([lonpp, latpp, h]) vtecs = np.array(vtecs) - Bpars = np.array(Bpars) + Bpars = np.array(Bpars) ams = np.array(ams) pps = np.array(pps) plasprofiles = np.array(plasprofiles) - print (plasprofiles.shape,hweights.shape) + print(plasprofiles.shape, hweights.shape) plasprofiles *= hweights - nplas = plasprofiles/np.sum(plasprofiles,axis=1)[:,np.newaxis] - topprofiles = np.array(topprofiles) *np.diag(hweights) - ntop = topprofiles/np.sum(np.diagonal(topprofiles,0,1,2),axis=1)[:,np.newaxis,np.newaxis] + nplas = plasprofiles / np.sum(plasprofiles, axis=1)[:, np.newaxis] + topprofiles = np.array(topprofiles) * np.diag(hweights) + ntop = ( + topprofiles + / np.sum(np.diagonal(topprofiles, 0, 1, 2), axis=1)[:, np.newaxis, np.newaxis] + ) finalp = [] for k in range(ntop.shape[0]): finalp.append(np.diag(ntop[k])) finalp = np.array(finalp) - - RM = np.sum(-1*vtecs*ams*Bpars[:,:,0]*nplas*2.62e-6,axis=1) - RM2 = np.sum(-1*vtecs*ams*Bpars[:,:,0]*finalp*2.62e-6,axis=1) - RM3 = -1*vtecs[:,hidx]*ams[:,hidx]*Bpars[:,hidx,0]*2.62e-6 + RM = np.sum(-1 * vtecs * ams * Bpars[:, :, 0] * nplas * 2.62e-6, axis=1) + RM2 = np.sum(-1 * vtecs * ams * Bpars[:, :, 0] * finalp * 2.62e-6, axis=1) + RM3 = -1 * vtecs[:, hidx] * ams[:, hidx] * Bpars[:, hidx, 0] * 2.62e-6 if return_short: return RM2 else: - return vtecs,Bpars,ams,finalp,pps,nplas,RM2 + return vtecs, Bpars, ams, finalp, pps, nplas, RM2 diff --git a/manylinux2014/build.sh b/manylinux2014/build.sh index 375c44c..623d48c 100755 --- a/manylinux2014/build.sh +++ b/manylinux2014/build.sh @@ -7,4 +7,3 @@ for i in 36 37 38 39; do docker build -f manylinux2014/wheel${i}.docker . -t rmextract${i} docker run -v `pwd`/manylinux2014:/manylinux2014 rmextract${i} sh -c "cp /output/*.whl /manylinux2014/." done - diff --git a/setup.py b/setup.py index 4ac3425..20b5282 100644 --- a/setup.py +++ b/setup.py @@ -87,7 +87,7 @@ def read(rel_path): author="Maaijke Mevius", author_email="mevius@astron.nl", description="Extract TEC, vTEC, Earthmagnetic field and Rotation Measures from GPS " - "and WMM data for radio interferometry observations", + "and WMM data for radio interferometry observations", long_description=read("README.md"), long_description_content_type="text/markdown", maintainer="Marcel Loose",