**GAMIT分布解算学习记录以及报错解决方法记录**

GAMIT分布解算学习记录以及报错解决方法记录

一、解算前的准备工作:

(1)新建一个工程文件目录:(expt为目录,这里我们设置为demo,即mkdir demo)

mkdir <expt> 

进入到目录中(//demo表示工程文件的名称;)

cd demo  

(2)运行

sh_setup -yr 2017

会多生成一个tables文件
(3)在demo目录下新建rinex(观测数据o文件),brdc(广播星历n文件),igs(精密星历sp3文件) 三个目录,

mkdir rinex brdc igs

在这三个目录下下载相应的文件。
(4)进入igs目录,

cd igs  

然后doy,可以查看解算的当天周和周内天。
然后,下载星历

wget -nd ftp://cddis.gsfc.nasa.gov/pub/gps/products/1931/igs19312.sp3.Z

(我们使用的是1931周的第2天igs精密星历的数据),将下载的数据进行解压,uncompress *
(5)进入brdc目录,

cd ../brdc

然后下载

wget -c ftp://nfs.kasi.re.kr/gps/data/daily/2017/010/17n/brdc0100.17n.Z

然后解压,

 uncompress *

(6)进入rinex目录

cd ../rinex

然后下载几个站的数据

wget --http-user=anonymous --http-passwd=123456789@qq.com -nd http://garner.ucsd.edu/pub/rinex/2017/010/urum0100.17d.Z

下载完成之后,分别对每个站解压,
对于d.Z文件的解压,可使用

sh_crx2rnx -f urum0100.17d.Z

分别进行解压。
------------------------------------------------------------------------------~

二、文件下载完毕之后,制作表文件(station.info,process.defaults,sestbl.,sites.defaults,sittbl.,l文件)
(1)制作station.info文件
a)在rinex文件中,截取1~6行的内容作为头文件,

sed -n "1,6p" ../tables/station.info

b)将其生成到rinex目录下,

sed -n "1,6p" ../tables/station.info > ./station.info

c)更新tables文件,即可把我们下载的站按照要求的格式生成tables文件。

sh_upd_stnfo -files *.17o
如果对010这一天许多站进行批量制作tables表,可以使用`sh_upd_stnfo -files *0100.17o`
注:(也可对头尾两天进行进行更新,采用二分法检查是否更换接收机),具体参考以下链接:
[station.info制作](https://blog.youkuaiyun.com/weixin_42638388/article/details/99582813)

d)之后,将制作好的拷贝到tables下

cp station.info ../tables

Tips:(这个步骤也可以完全手动将tables下的station.info头文件拷贝到rinex下,然后更新制作)

(2)修改process.defaults文件
这个文件参数基本可以采用默认的设置。
除此之外,也可以使用rinex的头文件作为l文件的近似坐标(目前的精度较好)
a)在chen目录下,打开tables/process.defaults,即vim tables/process.defaults
设置set_use_rxc = "Y"(原本为N)

(3)修改sestbl.解算控制文件
a)观测值的使用(LC、L1+L2),这个一般保持默认,Choice of Observable = LC_AUTCLN
b)指定处理轨道策略,设置Choice of Experiment = RELAX.
c)误差改正模型,包括各种GRID格网模型改正,具体下载以及修改可参考以下链接:
转自GNSS helper:

(4)修改sites.defaults控制文件文件
该文件一般不设置,采用默认的就好;

(5)sittbl.站点控制表文件修改
对已知起算点,进行强约束,设置为0.05,代求点松弛约束,设置为10.

(6)制作l文件,可采用设置头文件的方法,也可采用以下方法
在 rinex文件夹下依次运行:

grep POSITION *.19o > lfile.rnx
rx2apr lfile.rnx 2019 216
gapr_to_l lfile.rnx.apr lfile. “” 2019 216

到此,所有的tables表文件已经准备好了。
要是想批量运行,直接到此就可以使用sh_gamit

---------------------------------------------------------------~~

下面是进行分布解算
三、在工程文件下新建一个目录,例如010,即10号的解(具体的解算就在该目录下完成)。mkdir 010 ,进入010文件,cd 010
(1)链接导航文件

ln -s ../brdc/brdc0100.17n ./

(2)链接星历文件,

ln -s ../igs/igs19312.sp3 ./

(3)链接rinex里的o文件

ln -s ../rinex/*.17o ./

(4)将tables中的内容,全部拷贝到当前目录,即010目录下

cp ../tables/* ./

注:链接到010目录下,占用的内存空间小,也可以不使用链接,而是将igs、brdc、rinex、tables下所有的内容全部拷贝到010目录下。(但是这一般针对文件数目较少的时候,多的时候最好还是链接,只把tables的内容拷贝过去。)
---------------------------------------------------------------~

四、分布解算的步骤:
第一步:make_xp

sh_makexp -expt demo -orbt igsf -sp3file igs19312.sp3 -yr 2017 -doy 010 -sess 99 -srin -nav brdc0100.17n -apr lfile. -sinfo 30 00 00 2880

问题:这一步需要加上-sp3file,否则会提示缺少-sp3file文件(我的不加显示会报错,你可以不加试试也行)。

第二步:轨道积分sp3fit

sh_sp3fit -f igs19312.sp3 -o igsf -d 2017 010 -r BERNE -t -u

(-t可以加,也可以不加,本人没加)

第三步:sh_check_sess,检查g文件和session.info的一致性

sh_check_sess -sess 010 -type gfile -file gigsf7.010

问题1:

sh_check_sess: Removing any PRN's from session.info that are missing from: gigsf7.010
missing input file: gigsf7.010 QUIT

解答:缺少输入文件gigsf7.010,由于第二步轨道积分,得到的文件夹是gigsg7.010(一个是“gigsg”,另一个是“gigsf”,具体原因也没找到),但是可以利用手动将文件夹gigsg7.010的名称,改为gigsf7.010,就行了。

问题2:

FATAL  :200803:1536:23.0 FIXDRV/fixdrv: Neither T- nor G-file available (Name tigsf7.010)
STOP FATAL Error: Stop from report_stat

解答:这一步也是因为缺少t文件或g文件,所以导致第七步fixdrv出现错误。可以在轨道积分(第二步)时,不加参数-t,重新运行,运用g文件也可。

第四步:makej,生成j文件

makej brdc0100.17n jbrdc7.010

第五步:sh_check_sess,检查j文件和session.info的一致性

sh_check_sess -sess 010 -type jfile -file jbrdc7.010

第六步:makex

makex demo.makex.batch

第七步:fixdrv

fixdrv ddemo7.010

第八步:生成q、o、h文件

csh bdemo7.bat

到此全部完成
(以上学习来自于陈超老师的《GNSS高精度数据处理——GAMIT/GLOBK入门》一书,仅作为个人学习记录)

### Gamit 运行时出现不合理年份错误的原因分析 在 GAMIT 软件运行过程中,如果遇到 `FATAL` 错误提示 `Unreasonable year`,通常表明输入文件中的时间戳存在问题。具体来说,导航文件(nav 文件)的时间字段可能包含了不合理的年份数据[^1]。 #### 导航文件格式验证 GAMIT 的导航文件需要遵循严格的 RINEX 标准。当析这些文件时,软件会检查日期和时间字段的有效性。如果发现异常值(如超出合理范围的年份),则会触发此类致命错误并终止程序执行。因此,在处理上述问题前需确认: - **Nav 文件来源**:确保所使用的广播星历文件来自可靠渠道,并且其命名规则与内容一致。 - **RINEX 版本兼容性**:不同版本之间可能存在细微差异,务必选用适合当前 GAMIT 配置环境下的相应类型文件[^2]。 #### 修改策略建议 为了修正此问题可以采取以下措施之一或组合使用它们来解决问题: ##### 方法一: 手动编辑有问题的数据记录 打开报错提到的具体 NAV 文档(`brdc2640.17n`)定位到指定位置(G 6 2533141641 23 59),仔细核对该部分是否存在明显逻辑矛盾之处比如非法字符或者超界数值等现象;若有,则依据实际情况调整至合法范围内再重新提交给系统尝试计过程继续下去即可。 ##### 方法二: 利用脚本批量清理异常条目 对于大规模作业场景下频繁遭遇相似状况的情况可编写自动化工具辅助完成预处理工作。下面给出一段 Python 实现示例用于检测并移除含有不合常规年的观测资料片段: ```python def clean_nav_file(input_path, output_path): with open(input_path, 'r') as infile, open(output_path, 'w') as outfile: for line in infile: fields = line.split() if len(fields) >= 6 and fields[0].startswith('G'): try: epoch_year = int(fields[5]) if not (1980 <= epoch_year <= 2030): # 假设有效年限区间在此范围内 continue # 如果不符合条件就跳过写入该行 except ValueError: pass # 对无法转换成整数的也忽略掉 outfile.write(line) clean_nav_file("path/to/your/input/navfile", "path/to/output/cleaned_navfile") ``` 通过以上两种方式任选一种均能有效地规避因个别不良样本而导致整个流程崩溃的风险从而保障整体任务顺利完成目标。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值