मुझे अपने कोड को चलाने के दौरान फोर्टन रनटाइम चेतावनी "एक सरणी अस्थायी बनाया गया" मिलता है (gfortran के साथ संकलित) और मैं जानना चाहता हूं कि इस चेतावनी को हल करने का कोई बेहतर तरीका है या नहीं।फोरट्रान रनटाइम चेतावनी: अस्थायी सरणी
allocate(flx_est(lsign,3))
allocate(flx_err(lsign,3))
do i=1,lsign
call combflx_calc(flx_est(i,:),flx_err(i,:))
enddo
सबरूटीन अंदर मैं इस तरह चर निर्धारित:
मेरे मूल कोड कुछ इस तरह है
subroutine combflx_calc(flx_est,flx_err)
use,intrinsic :: ISO_Fortran_env, only: real64
implicit none
real(real64),intent(inout) :: flx_est(3),flx_err(3)
flux_est
और flx_err
वैक्टर कई शर्तों के आधार पर सबरूटीन के अंदर बदल सकते हैं और मुझे तदनुसार उनके मूल्यों को अपडेट करने की आवश्यकता है।
फ़ोरट्रान इस संरचना को पसंद नहीं करता है। मैं इसे अस्थायी चर परिभाषित कर सकता हूं:
tmp_flx_est=flx_est(i,:)
tmp_flx_err=flx_err(i,:)
call combflx_calc(tmp_flx_est,tmp_flx_err)
flx_est(i,:)=tmp_flx_est
flx_err(i,:)=tmp_flx_err
लेकिन ऐसा लगता है कि यह मुझे ठीक करने का एक मूर्ख तरीका है।
जैसा कि आप देख सकते हैं कि मैं फोरट्रान के साथ एक विशेषज्ञ नहीं हूं, इसलिए कोई भी सहायता स्वागत से अधिक है।
आपके "फिक्स" को कुछ भी ठीक करने का तरीका क्या है? अस्थायी अभी भी है, आप इसे मैन्युअल रूप से बना रहे हैं। –
फिक्सिंग नहीं, मास्किंग बेहतर है। मुझे अपने शुरुआती दृष्टिकोण के संभावित नुकसान को नहीं देखा गया था इसलिए मैं चेतावनी – cardogar
से छुटकारा पाना चाहता था, मैं असहमत हूं कि मास्किंग फिक्सिंग से बेहतर है। यदि आप मास्क करना चाहते हैं तो आप रनटाइम जांच सक्षम करने के साथ संकलित नहीं कर सकते हैं। – casey