00001 namespace Tests
00002 {
00003 using System;
00004 using System.Collections.Generic;
00005 using Microsoft.VisualStudio.TestTools.UnitTesting;
00006 using NewGamePhysics.Physics;
00007 using NewGamePhysics.Utilities;
00008
00012 [TestClass]
00013 public class UnitTestGravityEarth
00014 {
00015 public UnitTestGravityEarth()
00016 {
00017 }
00018
00019 private TestContext testContextInstance;
00020
00025 public TestContext TestContext
00026 {
00027 get
00028 {
00029 return testContextInstance;
00030 }
00031 set
00032 {
00033 testContextInstance = value;
00034 }
00035 }
00036
00040 [TestMethod]
00041 public void GravityEarthLoadModelFile()
00042 {
00043 GravityEarthGfcModel gravityEarth = new GravityEarthGfcModel();
00044 gravityEarth.LoadGfcModel(@"ggm03s.gfc");
00045 Assert.AreEqual(gravityEarth.ModelOrder, 180);
00046 Assert.AreEqual(gravityEarth.CalcOrder, 180);
00047
00048 gravityEarth.LoadGfcModel(@"eigen5c.gfc");
00049 Assert.AreEqual(gravityEarth.ModelOrder, 360);
00050 Assert.AreEqual(gravityEarth.CalcOrder, 360);
00051 }
00052
00056 [TestMethod]
00057 public void GravityEarthLoadGridFile()
00058 {
00059 GravityEarthGfcGrid gravityEarth = new GravityEarthGfcGrid();
00060 gravityEarth.LoadGravityMap(@"eigen5c.gdf");
00061 Assert.AreEqual(gravityEarth.Size, 65341);
00062 }
00063
00067 [TestMethod]
00068 public void GravityEarthCalculateGrid()
00069 {
00070 GravityEarthGfcGrid gravityEarth = new GravityEarthGfcGrid();
00071 gravityEarth.LoadGravityMap(@"eigen5c.gdf");
00072
00073
00074
00075
00076 string[] testdata = {
00077
00078
00079 "126.0000 37.0000 979914.448336",
00080 "126.2500 37.0000 979922.352799",
00081 "126.5000 37.0000 979924.633472",
00082 "126.7500 37.0000 979922.081383",
00083 "127.0000 37.0000 979916.785445",
00084 "126.0000 36.7500 979882.959664",
00085 "126.2500 36.7500 979888.765359",
00086 "126.5000 36.7500 979897.746912",
00087 "126.7500 36.7500 979895.879925",
00088 "127.0000 36.7500 979883.720262",
00089 "126.0000 36.5000 979863.306337",
00090 "126.2500 36.5000 979876.866452",
00091 "126.5000 36.5000 979877.498516",
00092 "126.7500 36.5000 979853.527464",
00093 "127.0000 36.5000 979841.388265",
00094 "126.0000 36.2500 979849.782964",
00095 "126.2500 36.2500 979862.262440",
00096 "126.5000 36.2500 979867.176353",
00097 "126.7500 36.2500 979823.843720",
00098 "127.0000 36.2500 979841.700404",
00099 "126.0000 36.0000 979834.101367",
00100 "126.2500 36.0000 979840.798833",
00101 "126.5000 36.0000 979842.036805",
00102 "126.7500 36.0000 979833.011654",
00103 "127.0000 36.0000 979829.875387",
00104
00105
00106 "46.0000 47.0000 980784.237968",
00107 "46.2500 47.0000 980793.748374",
00108 "46.5000 47.0000 980777.584929",
00109 "46.7500 47.0000 980780.749349",
00110 "47.0000 47.0000 980790.402344",
00111 "46.0000 46.7500 980763.400078",
00112 "46.2500 46.7500 980774.219026",
00113 "46.5000 46.7500 980777.852799",
00114 "46.7500 46.7500 980776.626910",
00115 "47.0000 46.7500 980785.249340",
00116 "46.0000 46.5000 980748.768039",
00117 "46.2500 46.5000 980750.621451",
00118 "46.5000 46.5000 980755.220104",
00119 "46.7500 46.5000 980760.313200",
00120 "47.0000 46.5000 980772.486144",
00121 "46.0000 46.2500 980733.156652",
00122 "46.2500 46.2500 980741.272033",
00123 "46.5000 46.2500 980737.550959",
00124 "46.7500 46.2500 980733.202427",
00125 "47.0000 46.2500 980739.222344",
00126 "46.0000 46.0000 980708.255067",
00127 "46.2500 46.0000 980709.374456",
00128 "46.5000 46.0000 980716.814933",
00129 "46.7500 46.0000 980718.081268",
00130 "47.0000 46.0000 980720.099740"
00131 };
00132
00133 Scanf scanf = new Scanf();
00134 object[] t;
00135 for (int i = 0; i < testdata.Length; i++)
00136 {
00137 t = scanf.Scan(testdata[i], "%lf %lf %lf");
00138 double lon = (double)t[0];
00139 double lat = (double)t[1];
00140 double expected = (double)t[2]*1e-5;
00141 double value = gravityEarth.Calculate(lat, lon, 0.0);
00142 double error = Math.Abs(value - expected);
00143 Console.WriteLine(
00144 "gravityEarth.Calculate({0},{1},0.0): expected {2} got {3} error {4}",
00145 lat,
00146 lon,
00147 expected,
00148 value,
00149 error);
00150 Assert.IsTrue(error <= 5e-3);
00151 }
00152 }
00153
00158 [TestMethod]
00159 public void GravityEarthCalculateModelA()
00160 {
00161 Console.WriteLine("Model: eigen5c.gfc");
00162
00163 GravityEarthGfcModel gravityEarth = new GravityEarthGfcModel();
00164 gravityEarth.LoadGfcModel(@"eigen5c.gfc");
00165
00166
00167 gravityEarth.CalcOrder = gravityEarth.ModelOrder;
00168
00169
00170
00171
00172 string[] testdata = {
00173
00174
00175 "126.0000 37.0000 979914.448336",
00176 "126.2500 37.0000 979922.352799",
00177 "126.5000 37.0000 979924.633472",
00178 "126.7500 37.0000 979922.081383",
00179 "127.0000 37.0000 979916.785445",
00180 "126.0000 36.7500 979882.959664",
00181 "126.2500 36.7500 979888.765359",
00182 "126.5000 36.7500 979897.746912",
00183 "126.7500 36.7500 979895.879925",
00184 "127.0000 36.7500 979883.720262",
00185 "126.0000 36.5000 979863.306337",
00186 "126.2500 36.5000 979876.866452",
00187 "126.5000 36.5000 979877.498516",
00188 "126.7500 36.5000 979853.527464",
00189 "127.0000 36.5000 979841.388265",
00190 "126.0000 36.2500 979849.782964",
00191 "126.2500 36.2500 979862.262440",
00192 "126.5000 36.2500 979867.176353",
00193 "126.7500 36.2500 979823.843720",
00194 "127.0000 36.2500 979841.700404",
00195 "126.0000 36.0000 979834.101367",
00196 "126.2500 36.0000 979840.798833",
00197 "126.5000 36.0000 979842.036805",
00198 "126.7500 36.0000 979833.011654",
00199 "127.0000 36.0000 979829.875387"
00200 };
00201
00202 Scanf scanf = new Scanf();
00203 object[] t;
00204 for (int i = 0; i < testdata.Length; i++)
00205 {
00206 t = scanf.Scan(testdata[i], "%lf %lf %lf");
00207 double lon = (double)t[0];
00208 double lat = (double)t[1];
00209 double expected = (double)t[2] * 1e-5;
00210 double value = gravityEarth.Calculate(lat, lon, 0.0);
00211 double error = Math.Abs(value - expected);
00212 Console.WriteLine(
00213 "gravityEarth.Calculate({0},{1},0.0): expected {2} got {3} error {4}",
00214 lat,
00215 lon,
00216 expected,
00217 value,
00218 error);
00219
00220
00221 }
00222 }
00223
00228 [TestMethod]
00229 public void GravityEarthCalculateModelB()
00230 {
00231 Console.WriteLine("Model: ggm03s.gfc");
00232
00233 GravityEarthGfcModel gravityEarth = new GravityEarthGfcModel();
00234 gravityEarth.LoadGfcModel(@"ggm03s.gfc");
00235
00236
00237
00238 gravityEarth.CalcOrder = 120;
00239
00240
00241
00242
00243 string[] testdata = {
00244
00245
00246 "46.0000 47.0000 980784.237968",
00247 "46.2500 47.0000 980793.748374",
00248 "46.5000 47.0000 980777.584929",
00249 "46.7500 47.0000 980780.749349",
00250 "47.0000 47.0000 980790.402344",
00251 "46.0000 46.7500 980763.400078",
00252 "46.2500 46.7500 980774.219026",
00253 "46.5000 46.7500 980777.852799",
00254 "46.7500 46.7500 980776.626910",
00255 "47.0000 46.7500 980785.249340",
00256 "46.0000 46.5000 980748.768039",
00257 "46.2500 46.5000 980750.621451",
00258 "46.5000 46.5000 980755.220104",
00259 "46.7500 46.5000 980760.313200",
00260 "47.0000 46.5000 980772.486144",
00261 "46.0000 46.2500 980733.156652",
00262 "46.2500 46.2500 980741.272033",
00263 "46.5000 46.2500 980737.550959",
00264 "46.7500 46.2500 980733.202427",
00265 "47.0000 46.2500 980739.222344",
00266 "46.0000 46.0000 980708.255067",
00267 "46.2500 46.0000 980709.374456",
00268 "46.5000 46.0000 980716.814933",
00269 "46.7500 46.0000 980718.081268",
00270 "47.0000 46.0000 980720.099740"
00271 };
00272
00273 Scanf scanf = new Scanf();
00274 object[] t;
00275 for (int i = 0; i < testdata.Length; i++)
00276 {
00277 t = scanf.Scan(testdata[i], "%lf %lf %lf");
00278 double lon = (double)t[0];
00279 double lat = (double)t[1];
00280 double expected = (double)t[2] * 1e-5;
00281 double value = gravityEarth.Calculate(lat, lon, 0.0);
00282 double error = Math.Abs(value - expected);
00283 Console.WriteLine(
00284 "gravityEarth.Calculate({0},{1},0.0): expected {2} got {3} error {4}",
00285 lat,
00286 lon,
00287 expected,
00288 value,
00289 error);
00290
00291
00292 }
00293 }
00294 }
00295 }