近期有同学问我关于GROOPS的操作方法,包括循环、变量以及文件路径等。不过我最近的学习主要在理论方面,对GROOPS软件操作的了解不是十分深入,以下仅分享我的拙见,需要的同学可以浏览一下。(GROOPS官方说明文档 https://groops-devs.github.io/groops/html/index.html)
1.GROOPS的架构
1.1 GROOPS控制文件
GROOPS是由控制文件控制的,该文件为自己设置的名称.xml,每当我们打开GROOPS,并手动添加了成员(变量、子程序模块),并进行运行前,都会提示你:
这个xml文件就是成员按照一定方式组合,并按照你添加子程序的顺序进行编排的控制文件,简单来说,可以简单看作成一个不唯一的main函数(控制文件可以有多个),通过这个控制文件,可以执行里边包含的所有程序。
控制文件路径设置(在工作目录下):
当你设置好路径并完成自己的控制文件(处理策略),会在设置的工作目录下看到你的xml文件(可以有多个控制文件,每一个代表一套处理策略):
1.2 控制文件的执行
点击图中绿色按钮,出现执行选项框,勾选控制文件中你需要执行的部分,执行顺序由上到下。
如果是window用于,在Command line选择groops(windows)。勾选Use logfile将会在控制文件所在的文件目录下生成一个记录文件,程序运行的状况将被记录在内,用以检查程序出错或是不合理的地方。
2.GROOPS的变量与解析器
2.1全局变量
学过编程的都知道,全局变量是适用范围是包含全局变量的整个程序,在GROOPS中,全局变量适用范围是每一个控制文件的范围。设置全局变量:
点击global中的add,输入变量名以及类型以完成全局变量定义
GROOPS自己定义的全局变量除了基本的类型(整数,浮点,布尔。无符号整数,字符串)外,还有很多其他类型,我只看了需要的个别变量:
time
以简化儒略日的格式存储,设置这个变量是为了处理一个时间段的数据时,避免反复手动输入时间的麻烦。
filename
存储文件路径,一般设置为工作目录(一个工作目录下应包含数据文件夹,结果文件夹,控制文件等),官方给出的说明文档中{groopsDir}啥的都是这个类型。
looptype
相当于将一个循环函数,在该函数内设置自己要进行循环的内容。如获取卫星的prn号:
上图采用从Ascii文件逐行读取prn号并赋值给变量prn(variableLoopstring)。
全局变量中循环的用法一:
我们会注意到,identifier右侧出现了loop=loopprn(loopprn是我设置全局loop变量的名称)的字样,它的功能也即对单个变量进行循环赋值,通过右键需要进行循环赋值的变量(图中identifier),点击”set loop“,并且选择全局中设置好的循环即可。
全局变量中循环的用法二:见第3节。
2.2局部变量
局部变量比较好理解,即在GROOPS单个子程序中适用的变量,出了这个子程序就无法使用,这点在loopProgram中时常体现。这里不做赘述,详情看第3节。
2.3 文本解析器
GROOPS中,我们难免会用变量替代文本路径中的一些内容以达到简化的目的。
如:我们在循环中要输出卫星的轨道文件。那么我们会采取以下输出方式更具有效率
这里只说一下图中的{prn},prn是从文件里提出的变量值,如果要写道路径中,一定要添加 {},功能就是将变量转换为GROOPS可识别的文本模式,不添加就会报错。至于更多文本解析器的操作内容可参看说明文档中的Parser部分。
3.GROOPS中的循环
在2.1中已经介绍了Loop的全局变量,这里介绍一下LoopProgram:
LoopProgram是一个循环程序,添加的第一个LoopProgram即为主循环,在其中继续添加想要循环的子程序即可构成该子程序的循环。若添加的子程序还为LoopProgram,那么就构成了循环的嵌套。每一个循环都对应着相应的变量,步长与约束条件(相当于for(定义变量; 条件;步长 ))。
循环的类型自己选择,图中循环的类型是timeintervals,它的意思是将某一时间段分割为若干时间段,逐次获取每一个时间段两端的时间值保存在variableLoopTimeStart与variableLoopTimeEnd中,这两个变量即为局部变量,只适用于主循环范围内的子程序中,相应地,嵌套循环的局部变量只适用于嵌套循环的子程序中。我这个示范地主循环程序目的是获取时间变量以便后续操作,设置的开始时间与结束时间为一天的0点与24点,采样间隔为1day,因此主循环只进行一次(具体作用不在赘述,只是为了帮助理解)。
此外,也可使用全局循环变量作为循环类型
这个作用相当于用全局循环变量替代该循环。
时间有限,分享的只是自己的一些拙见,中间可能有理解不够充分的地方,还望大家指正,本文仅供初学者参考,大佬们就不用看啦。
另外, 本人目前在进行GROOPS网解策略的学习,如有进展会在这里发表一些自己的见解,希望同行可以相互交流。