20160921

四种引用类型
Map的其他实现类:weakedhashmap,弱引用,会被回收
Identityhashmap,比较地址

容器总结1369
一张结构图
3个知识点:
迭代器:iterator,iterable
比较器:comparable,comparator
泛型:方法,类,接口,擦除,通配符,叠加
6个接口
9个常用类
# if defined (WATER_QUALITY) ! GET THE WATER QUALITY VARIABLE VAR => FIND_VAR(NCF,'river_wqm1',FOUND) ALLOCATE(STORAGE_VEC(nrs), stat = status) IF(STATUS /= 0) CALL FATAL_ERROR("ALLOCATION ERROR IN RIVER_DISCHARGE") RIVER_FORCING(I)%WQM1_N => reference_var(var) CALL NC_CONNECT_PVAR(RIVER_FORCING(I)%WQM1_N,STORAGE_VEC) NULLIFY(STORAGE_VEC) ALLOCATE(STORAGE_VEC(nrs), stat = status) IF(STATUS /= 0) CALL FATAL_ERROR("ALLOCATION ERROR IN RIVER_DISCHARGE") RIVER_FORCING(I)%WQM1_P => reference_var(var) CALL NC_CONNECT_PVAR(RIVER_FORCING(I)%WQM1_P,STORAGE_VEC) NULLIFY(STORAGE_VEC) VAR => FIND_VAR(NCF,'river_wqm2',FOUND) ALLOCATE(STORAGE_VEC(nrs), stat = status) IF(STATUS /= 0) CALL FATAL_ERROR("ALLOCATION ERROR IN RIVER_DISCHARGE") RIVER_FORCING(I)%WQM2_N => reference_var(var) CALL NC_CONNECT_PVAR(RIVER_FORCING(I)%WQM2_N,STORAGE_VEC) NULLIFY(STORAGE_VEC) ALLOCATE(STORAGE_VEC(nrs), stat = status) IF(STATUS /= 0) CALL FATAL_ERROR("ALLOCATION ERROR IN RIVER_DISCHARGE") RIVER_FORCING(I)%WQM2_P => reference_var(var) CALL NC_CONNECT_PVAR(RIVER_FORCING(I)%WQM2_P,STORAGE_VEC) NULLIFY(STORAGE_VEC) VAR => FIND_VAR(NCF,'river_wqm3',FOUND) ALLOCATE(STORAGE_VEC(nrs), stat = status) IF(STATUS /= 0) CALL FATAL_ERROR("ALLOCATION ERROR IN RIVER_DISCHARGE") RIVER_FORCING(I)%WQM3_N => reference_var(var) CALL NC_CONNECT_PVAR(RIVER_FORCING(I)%WQM3_N,STORAGE_VEC) NULLIFY(STORAGE_VEC) ALLOCATE(STORAGE_VEC(nrs), stat = status) IF(STATUS /= 0) CALL FATAL_ERROR("ALLOCATION ERROR IN RIVER_DISCHARGE") RIVER_FORCING(I)%WQM3_P => reference_var(var) CALL NC_CONNECT_PVAR(RIVER_FORCING(I)%WQM3_P,STORAGE_VEC) NULLIFY(STORAGE_VEC) VAR => FIND_VAR(NCF,'river_wqm4',FOUND) ALLOCATE(STORAGE_VEC(nrs), stat = status) IF(STATUS /= 0) CALL FATAL_ERROR("ALLOCATION ERROR IN RIVER_DISCHARGE") RIVER_FORCING(I)%WQM4_N => reference_var(var) CALL NC_CONNECT_PVAR(RIVER_FORCING(I)%WQM4_N,STORAGE_VEC) NULLIFY(STORAGE_VEC) ALLOCATE(STORAGE_VEC(nrs), stat = status) IF(STATUS /= 0) CALL FATAL_ERROR("ALLOCATION ERROR IN RIVER_DISCHARGE") RIVER_FORCING(I)%WQM4_P => reference_var(var) CALL NC_CONNECT_PVAR(RIVER_FORCING(I)%WQM4_P,STORAGE_VEC) NULLIFY(STORAGE_VEC) VAR => FIND_VAR(NCF,'river_wqm5',FOUND) ALLOCATE(STORAGE_VEC(nrs), stat = status) IF(STATUS /= 0) CALL FATAL_ERROR("ALLOCATION ERROR IN RIVER_DISCHARGE") RIVER_FORCING(I)%WQM5_N => reference_var(var) CALL NC_CONNECT_PVAR(RIVER_FORCING(I)%WQM5_N,STORAGE_VEC) NULLIFY(STORAGE_VEC) ALLOCATE(STORAGE_VEC(nrs), stat = status) IF(STATUS /= 0) CALL FATAL_ERROR("ALLOCATION ERROR IN RIVER_DISCHARGE") RIVER_FORCING(I)%WQM5_P => reference_var(var) CALL NC_CONNECT_PVAR(RIVER_FORCING(I)%WQM5_P,STORAGE_VEC) NULLIFY(STORAGE_VEC) VAR => FIND_VAR(NCF,'river_wqm6',FOUND) ALLOCATE(STORAGE_VEC(nrs), stat = status) IF(STATUS /= 0) CALL FATAL_ERROR("ALLOCATION ERROR IN RIVER_DISCHARGE") RIVER_FORCING(I)%WQM6_N => reference_var(var) CALL NC_CONNECT_PVAR(RIVER_FORCING(I)%WQM6_N,STORAGE_VEC) NULLIFY(STORAGE_VEC) ALLOCATE(STORAGE_VEC(nrs), stat = status) IF(STATUS /= 0) CALL FATAL_ERROR("ALLOCATION ERROR IN RIVER_DISCHARGE") RIVER_FORCING(I)%WQM6_P => reference_var(var) CALL NC_CONNECT_PVAR(RIVER_FORCING(I)%WQM6_P,STORAGE_VEC) NULLIFY(STORAGE_VEC) VAR => FIND_VAR(NCF,'river_wqm7',FOUND) ALLOCATE(STORAGE_VEC(nrs), stat = status) IF(STATUS /= 0) CALL FATAL_ERROR("ALLOCATION ERROR IN RIVER_DISCHARGE") RIVER_FORCING(I)%WQM7_N => reference_var(var) CALL NC_CONNECT_PVAR(RIVER_FORCING(I)%WQM7_N,STORAGE_VEC) NULLIFY(STORAGE_VEC) ALLOCATE(STORAGE_VEC(nrs), stat = status) IF(STATUS /= 0) CALL FATAL_ERROR("ALLOCATION ERROR IN RIVER_DISCHARGE") RIVER_FORCING(I)%WQM7_P => reference_var(var) CALL NC_CONNECT_PVAR(RIVER_FORCING(I)%WQM7_P,STORAGE_VEC) NULLIFY(STORAGE_VEC) VAR => FIND_VAR(NCF,'river_wqm8',FOUND) ALLOCATE(STORAGE_VEC(nrs), stat = status) IF(STATUS /= 0) CALL FATAL_ERROR("ALLOCATION ERROR IN RIVER_DISCHARGE") RIVER_FORCING(I)%WQM8_N => reference_var(var) CALL NC_CONNECT_PVAR(RIVER_FORCING(I)%WQM8_N,STORAGE_VEC) NULLIFY(STORAGE_VEC) ALLOCATE(STORAGE_VEC(nrs), stat = status) IF(STATUS /= 0) CALL FATAL_ERROR("ALLOCATION ERROR IN RIVER_DISCHARGE") RIVER_FORCING(I)%WQM8_P => reference_var(var) CALL NC_CONNECT_PVAR(RIVER_FORCING(I)%WQM8_P,STORAGE_VEC) NULLIFY(STORAGE_VEC) ! afm 20160516 & EJA 20160921 river_forcing(i)%wqm1_n%curr_stkcnt = 0; river_forcing(i)%wqm1_p%curr_stkcnt = 0 river_forcing(i)%wqm2_n%curr_stkcnt = 0; river_forcing(i)%wqm2_p%curr_stkcnt = 0 river_forcing(i)%wqm3_n%curr_stkcnt = 0; river_forcing(i)%wqm3_p%curr_stkcnt = 0 river_forcing(i)%wqm4_n%curr_stkcnt = 0; river_forcing(i)%wqm4_p%curr_stkcnt = 0 river_forcing(i)%wqm5_n%curr_stkcnt = 0; river_forcing(i)%wqm5_p%curr_stkcnt = 0 river_forcing(i)%wqm6_n%curr_stkcnt = 0; river_forcing(i)%wqm6_p%curr_stkcnt = 0 river_forcing(i)%wqm7_n%curr_stkcnt = 0; river_forcing(i)%wqm7_p%curr_stkcnt = 0 river_forcing(i)%wqm8_n%curr_stkcnt = 0; river_forcing(i)%wqm8_p%curr_stkcnt = 0 后面的代码在处理什么?
最新发布
11-04
<think>首先,用户的问题是关于一段代码的,问的是“后面的代码在处理什么?” 从上下文看,用户提供了大段代码,最后提到“后面的代码在处理什么?” 但实际上,用户提供的代码是完整的,最后部分是关于设置 `river_forcing(i)%wqmX_N%curr_stkcnt = 0` 和类似的。用户的问题是针对最后这部分。 用户的消息是:“后面的代码在处理什么?” 而代码是以这行结尾的: ```fortran river_forcing(i)%wqm8_n%curr_stkcnt = 0; river_forcing(i)%wqm8_p%curr_stkcnt = 0 ``` 所以,用户想知道这部分代码在做什么。 现在,我需要用中文回答问题。规则是:使用中文回答问题,并在回答后提出3-5个相关问题,以“§§相关问题§§”开头,不能换行分散。 回顾用户提供的代码:这是一个Fortran代码片段,似乎是用于处理河流排放中的水质变量。代码在条件编译块 `# if defined (WATER_QUALITY)` 下,所以当定义了 WATER_QUALITY 时执行。 关键部分: 1. 它通过 `FIND_VAR` 找到变量如 'river_wqm1',然后分配内存给 `STORAGE_VEC`,并连接到 `RIVER_FORCING(I)%WQM1_N` 和 `WQM1_P`。类似地处理 wqm2 到 wqm8。 2. 最后,在注释 `! afm 20160516 & EJA 20160921` 后,有代码设置 `river_forcing(i)%wqm1_n%curr_stkcnt = 0` 等,对每个 wqm1 到 wqm8 的 _n 和 _p 都设置为 0。 所以,最后的部分在初始化 `curr_stkcnt` 变量为 0。 回答用户的问题:“后面的代码在处理什么?” 意思是“What is the later code handling?” 回答:这部分代码是在初始化每个水质变量的当前堆栈计数(current stack count)为 0。这可能是用于跟踪时间步长或数据更新的计数器。 现在,我需要构建回答: 1. 用中文解释代码。 2. 在回答后,提出3-5个相关问题。 3. 相关问题必须以“§§相关问题§§”开头,并且一行输出。 相关问题应该基于用户的问题和我的回答。用户的问题是关于代码的,我的回答是关于初始化的。 可能的相关问题: 1. 什么是 curr_stkcnt?它的作用是什么? 2. 为什么需要为每个水质变量设置这个值? 3. 这段代码属于哪个模型或项目?(因为代码中有河流排放和水质,可能是一个水动力学模型) 4. 如何确保内存分配正确无误?(代码中有错误检查) 5. 其他相关的变量或操作。 确保3-5个问题。 最后,输出格式:回答完后,立即写“§§相关问题§§”,然后列出问题,用数字点号,如“1. ...” 在示例中是“§§相关问题§§”然后换行,但规则说“第一行必须完整且输出 \"§§相关问题§§\"!禁止换行分散。” 所以应该在输出时,“§§相关问题§§” 后直接跟问题,不能换行分散。意思是问题列表不能换行,但在文本中,每个问题可能需要换行。 看示例格式: ```plaintext §§相关问题§§ 1. ··· 2. ··· 3. ··· ``` 在示例中,是“§§相关问题§§”后换行然后问题列表。但规则说“禁止换行分散”,可能意味着不能在“§§相关问题§§”前或中间换行,但列表可以分行。 规则:"第一行必须完整且输出 \"§§相关问题§§\"!禁止换行分散。" 我认为“禁止换行分散”可能指的是不要在标题内换行,比如不要写成“§§相\n关问题§§”,但列表可以是多行。 在示例中是换行的,所以我可以类似输出。 现在,制定回答。 回答内容: - 解释代码:最后部分的代码是在初始化每个水质变量(如 WQM1 到 WQM8)的当前堆栈计数器(curr_stkcnt)为 0。这可能是用于管理时间序列数据或更新状态,确保在模拟开始时计数器从零开始。 相关问题: 1. `curr_stkcnt` 的具体作用是什么? 2. 为什么需要为每个水质变量设置单独的计数器? 3. 这个初始化步骤在模型中的作用是什么? 4. 如果初始化失败,会有什么后果?(代码中有错误处理) 5. 水质变量 WQM1 到 WQM8 代表什么? 确保3-5个,我选了5个。 输出格式: - 先回答。 - 然后“§§相关问题§§” - 然后问题列表,每行一个。 在文本中实现。 </think>这段代码是Fortran语言编写的,属于一个水动力学和水质模型的河流排放处理模块。具体来说,在条件编译指令 `# if defined (WATER_QUALITY)`(即启用水质模块时)下,代码的最后部分(以 `! afm 20160516 & EJA 20160921` 注释开始)主要负责初始化每个水质变量的当前堆栈计数器(`curr_stkcnt`)。这些水质变量包括 `WQM1` 到 `WQM8`,每个变量分为 `_N` 和 `_P` 两个维度(可能代表时间步长或数据节点)。代码将它们的 `curr_stkcnt` 属性设置为 0,目的是在模拟开始时重置计数器,确保后续数据读取或更新操作从一个干净的初始状态开始。这在时间序列模拟中常见,用于跟踪数据加载的索引或状态,避免累积错误。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值