SHUSCT / SHUBYD_GMCORE_ASC24

MIT License
0 stars 0 forks source link

Optimize: Expand loops in dynamics/adv/ffsl_mod.F90 #25

Closed shepherdmrf closed 5 months ago

shepherdmrf commented 5 months ago

Written in #24

shepherdmrf commented 5 months ago

I'm not sure.Please help me check my code.

GrassBlock2016 commented 5 months ago

20

BeverlyCrl commented 5 months ago

我想也许你需要一个余数处理的part,这就像c的for循环 一次循环里做两次操作,把计数+2后判断是否在范围里。这会涉及到一个问题 如果原所需循环次数是奇数的话你可能会漏掉最后一个。 这里严谨来说需要在你修改了计数步进为2的循环的同层级,写一个处理余数的part。次数是原循环次数对修改后的步进跨度取模,这个循环的内容是原循环内的做一次操作的内容。 可以参见今天另一个issue的改法,比如在它步进为8的修改下方还有一个对8取模后的余数part。可以试着修改一下。

BeverlyCrl commented 5 months ago

也许下面的代码会对你有帮助

            do i = mesh%half_ids, mesh%half_ide - 1, 2

            end do
        do i = mesh%half_ide - mod(mesh%half_ide - mesh%half_ids, 2),  mesh%half_ide

        end do

当然,如果循环条件只是从1变成2的时候,余数part的do循环写成if也可以。不过循环来写是通式