[QOCA学习笔记]利用mload模块计算地表质量负载

在季节性时间尺度上,地表质量负载引起的季节性场地位移是空间大地测量中站点坐标时间序列的主要特征。关于QOCA软件的mload简介可以移步下载《Briefing of mass load caused site displacements》
在处理数据时想按照文献中这样的方法计算安徽省区域的地表质量负载:(参考文献:武曙光. 区域CORS站坐标时间序列特征分析[D]. 2017.)
在这里插入图片描述
首先下载文中说到的需要的数据。其中,大气压数据、土壤湿度和积雪深度数据下载机构是NCEP,均采用NCEP-DOE Reanalysis 2的数据,网址为:NCEP-DOE Reanalysis 2: Summary,在该网站上可以找到数据下载的入口:
在这里插入图片描述
点击“Search all of the NCEP-DOE Reanalysis 2 available at PSL.”,进入根据你所需要的数据进行搜索并下载的界面,这里的分别下载大气压数据每6h、土壤湿度每24h和积雪深度每24h数据。
然后去NOPP-ECCO机构官网下载最新的非潮汐海洋负载的洋底压力模型数据,官网地址为:V4r4 User Guide这里的网址是最新的数据用户手册,下载数据之前可以先看清楚用户手册。下载这个数据之前首先得申请一个账户,申请了账户之后才会给用户分配密码,才可以进入数据下载网址下载数据。
在这里插入图片描述
进入这个数据下载中心,找到想要的年份,然后找到洋底压力模型文件(时间分辨率为12h):
在这里插入图片描述
在这里插入图片描述
将相应年份的数据下载之后整理好,准备放入QOCA软件里进行解算。
【未完待续…】

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
智能合约源代码 智能合约源代码TUSD /** *Submitted for verification at Etherscan.io on 2018-12-18 */ pragma solidity ^0.4.23; // This is the proxy contract for the TrustToken Registry // File: contracts/Proxy/Proxy.sol /** * @title Proxy * @dev Gives the possibility to delegate any call to a foreign implementation. */ contract Proxy { /** * @dev Tells the address of the implementation where every call will be delegated. * @return address of the implementation to which it will be delegated */ function implementation() public view returns (address); /** * @dev Fallback function allowing to perform a delegatecall to the given implementation. * This function will return whatever the implementation call returns */ function() external payable { address _impl = implementation(); require(_impl != address(0), "implementation contract not set"); assembly { let ptr := mload(0x40) calldatacopy(ptr, 0, calldatasize) let result := delegatecall(gas, _impl, ptr, calldatasize, 0, 0) let size := returndatasize returndatacopy(ptr, 0, size) switch result case 0 { revert(ptr, size) } default { return(ptr, size) } } } } // File: contracts/Proxy/UpgradeabilityProxy.sol /** * @title UpgradeabilityProxy * @dev This contract represents a proxy where the implementation address to which it will delegate can be upgraded */ contract UpgradeabilityProxy is Proxy { /** * @dev This event will be emitted every time the implementation gets upgraded * @param implementation representing the address of the upgraded implementation */ event Upgraded(address indexed implementation); // Storage position of the address of the current implementation bytes32 private constant implementationPosition = keccak256("trueUSD.proxy.implementation"); /** * @dev Tells the address of the current implementation * @return address of the current implementation */ function implementation() public view returns (address impl) { bytes32 position = implementationPosition; assembly { impl := sload(position) } } /** * @dev Sets the address of the
根据您提供的签名值,可以得到以下信息: ``` address owner = 0x1234567890123456789012345678901234567890; address spender = 0x0987654321098765432109876543210987654321; uint256 value = 100; uint256 nonce = 1; uint256 deadline = 1634028589; ``` 下面是使用Solidity代码计算r,s,v的值的示例: ```solidity function splitSignature(bytes memory signature) private pure returns (uint8 v, bytes32 r, bytes32 s) { require(signature.length == 65, "Invalid signature length"); assembly { r := mload(add(signature, 32)) s := mload(add(signature, 64)) v := byte(0, mload(add(signature, 96))) } if (v < 27) { v += 27; } require(v == 27 || v == 28, "Invalid signature value"); return (v, r, s); } function getPermitRSV(bytes32 domainSeparator, bytes32 structHash, bytes memory signature) private pure returns (uint256 r, uint256 s, uint8 v) { (v, bytes32 rBytes, bytes32 sBytes) = splitSignature(signature); r = uint256(rBytes); s = uint256(sBytes); bytes32 digest = keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash)); address signer = ecrecover(digest, v, rBytes, sBytes); require(signer != address(0) && signer == owner, "Invalid signature"); return (r, s, v); } function getPermitSignature() public view returns (uint256 r, uint256 s, uint8 v) { bytes32 domainSeparator = keccak256(abi.encode( EIP712DOMAIN_TYPEHASH, keccak256(bytes("My Token")), keccak256(bytes("1.0")), chainId, address(this) )); bytes32 structHash = keccak256(abi.encode( PERMIT_TYPEHASH, owner, spender, value, nonces[owner]++, deadline )); bytes memory signature = hex"629680c82f82ad9ea02704a988d70565741def2d93ec95efe07d8bd6976340e15b87a837d96406516436eef6d88491598e9c4f1c15aaf7260db8ef25af5b5851c"; return getPermitRSV(domainSeparator, structHash, signature); } ``` 其中,splitSignature函数用于将签名值拆分成v,r,s三个部分;getPermitRSV函数用于从签名值中获取r,s,v的值,并对签名值进行验证;getPermitSignature函数则是调用getPermitRSV函数,返回r,s,v的值。 注意,上述代码中的EIP712DOMAIN_TYPEHASH和PERMIT_TYPEHASH需要根据具体的ERC20代币合约进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值