fortrandown 发表于 2024-1-15 18:32:56

参数传递以及相加减

求助各位大神:
本人用WRF模型,fortran语言,在wrf论坛里多次提问,没有被解答,想来此地悉心请教。请各位大神赐教:
在solve_em.F 文件里,计算了一个变量。tracer(i,k,j,tr17_2) 这个标量,通过参数传递给module_microphysics_driver.F,然后又传递给了module_mp_full.F这个文件里的tr_two 着个变量。

问题是:在module_mp_full.F 这个文件里print出来的tr_two 是0.000000E00,把这个tr_two 加上一个变量后变成了nan。然后用一个新的变量qnin_new=tr_two之后输出的qnin_new 还是正常的值。
实在不明白为什么print出的0.0000E00的值在输出后可以是有意义的值,但是没办法和一个实数变量相加减。
求大神救救我吧。

fcode 发表于 2024-1-16 09:33:17

我也不明白。所以,上代码吧

fortrandown 发表于 2024-1-17 16:49:27

             grid%tra = tracer(ims,kms,jms,P_tr17_2).    (这里是计算tracer(ims,kms,jms,P_tr17_2)
       CALL microphysics_driver( ....(这里传递给了phys/module_microphysics_driver.F)&      , TRA = grid%tra &
      CALL sbm(.....          ,tr_two = TRA &      (这里又传递给了SBM)在SBM.F 里这个值赋值给qnin_new:qnin_new(I,K,J) = max(0.,tr_two(I,K,J)). 在code里面直接print*,“qnin”,qnin_new(I,K,J) 得到的0.00000E00但是output出来qnin_new的结果却是正确的。把qnin_new和另一个变量相加,也得到NAN。能output出来结果说明传递应该是有意义的,但是不知道为什么传递进来就不能相加减。请大神帮帮忙。最后在SBM.F 代码附上,比较长,请直接搜索关键字tr_two.



fortrandown 发表于 2024-1-17 16:50:50

代码附上
页: [1]
查看完整版本: 参数传递以及相加减