小编gil*_*ofb的帖子

如果可选参数不是PRESENT,我们可以避免创建局部变量吗?

我对PRESENT使用Fortran 95 的语句有疑问.目前我正在使用Silverfrost的Plato和他们的FTN95编译器(在"Release Win32"模式下).我想要做的是创建一个子程序SUB(a,b),其中b是一个可选变量.到目前为止一切都那么好,但是当我试图给出一个新的价值时,问题就出现bif (.NOT. present(b)) b=0.这是代码:

module MOD
contains
  subroutine SUB(a,b)
  implicit none
  integer :: a
  integer,optional :: b
  if (.NOT. present(b)) b=0
  print*, a,b
  end subroutine SUB
end module MOD

program TEST
use MOD
implicit none

integer :: i=2, j=1

call SUB(i,j)
call SUB(i)
call SUB(j)

end program TEST
Run Code Online (Sandbox Code Playgroud)

有没有一种优雅的方式摆脱这种情况,或者我真的需要创建另一个变量,b_aux例如,然后使用以下代码?:

if (present(b)) then
  b_aux=b
  else
    b_aux=0
endif
Run Code Online (Sandbox Code Playgroud)

fortran module subroutine optional-arguments

5
推荐指数
1
解决办法
1495
查看次数

LilyPond:格式化长脚注

使用 LilyPond 2.17.25 编写长脚注时,文本不会分成多行或遵守边距限制。如果可能的话,我也希望将其设置为合理的对齐方式。

这是一个小例子:

\version "2.17.25"
{
  \footnote #'(-1 . 1)
    \markup{Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut eget ante venenatis mi consectetur ornare. Cras facilisis dictum venenatis. Donec.}
  a'4 b' c'' d''
}
Run Code Online (Sandbox Code Playgroud)

多谢!

formatting text footnotes lilypond

5
推荐指数
1
解决办法
495
查看次数

FORTRAN 95:OPTIONAL语句不起作用(使用FTN95和Plato)

OPTIONAL在使用Fortran 95的函数和子程序中的语句有问题.目前我正在使用Silverfrost的Plato和他们的FTN95编译器(在"Release Win32"模式下).在我正在编写的更复杂的程序中尝试实现OPTIONAL语句之后,我创建了一个非常简单的程序来测试它.这是代码:

program TEST

implicit none
integer :: a=1, b=2

call Z(a,b)
call Z(a)
call Z(b)

end program TEST

subroutine Z(x,y)
implicit none
integer :: x
integer, optional :: y

if (present(y)) then
  write(*,*) x, y
  else
    write(*,*) x
endif

end subroutine Z
Run Code Online (Sandbox Code Playgroud)

我希望屏幕上显示以下结果:

1 2
1
2
Run Code Online (Sandbox Code Playgroud)

好吧,代码编译,虽然我得到一个警告(673)"SUBROUTINE Z被调用的参数太少".执行后,我进入我的屏幕:

1 2
Run Code Online (Sandbox Code Playgroud)

然后出现"访问冲突"错误消息.有人能理解这里有什么问题吗?

非常感谢!吉尔伯托

fortran subroutine optional plato

3
推荐指数
1
解决办法
1067
查看次数

矩阵线和列似乎在Fortran中反转打印

关于Fortran 95中的2维数组(即矩阵),我有一个简单的问题.据我所知,数学将矩阵内部的元素定义为Aij,其中i表示其行,j表示其列.好吧,如果我只是编码write(*,*) Matrix,结果会反转行和列!请参考以下示例代码:

program TEST
implicit none
integer :: P(3,3), i

P(1,1)=1
P(1,2)=2
P(1,3)=3
P(2,1)=4
P(2,2)=5
P(2,3)=6
P(3,1)=7
P(3,2)=8
P(3,3)=9

do i=1,3
  write(*,"(3(I1,1X))") P(i,1:3)
enddo

write(*,*)
write(*,"(3(I1,1X))") P

end program TEST
Run Code Online (Sandbox Code Playgroud)

通过使用上面的循环(修复一行,然后在其中打印每一列),我得到了我期望的结果:

1 2 3
4 5 6
7 8 9
Run Code Online (Sandbox Code Playgroud)

现在通过使用最后一个语句write(*,"(3(I1,1X))") P,我得到:

1 4 7
2 5 8
3 6 9
Run Code Online (Sandbox Code Playgroud)

我在这里做错了吗?

arrays fortran matrix fortran95

3
推荐指数
1
解决办法
2308
查看次数

FORTRAN 95:可以在不共享源代码的情况下共享模块吗?

我希望能够在不共享源代码的情况下共享FORTRAN 95模块.是否可以这样做(可能是通过共享.MOD文件)?如果这是相关的,我在Plato上使用Silverfrost FTN95编译器.到目前为止,我只能通过使用外部模块的源代码来完成这项工作.这是一个例子:


file:module_test.f95

module TEST
contains

  subroutine 1
  code...

end module TEST
Run Code Online (Sandbox Code Playgroud)

file:main_program.f95

include "module_test.f95"
program MAIN_PROGRAM
use TEST
implicit none

code...

end program MAIN_PROGRAM
Run Code Online (Sandbox Code Playgroud)

那么,有没有人可以使用我的模块TEST而不需要我的文件module_test.f95,也不能include "module_test.f95"使用主代码中的行?

非常感谢!

fortran module fortran95

3
推荐指数
1
解决办法
206
查看次数

Fortran 95:开放语句,状态变量:未知与替换

我想知道这句话之间有什么不同:

open(unit=11,file="something.TXT",status="unknown"),这是Fortran的默认值status(即,前一个语句是相同的open(unit=11,file="something.TXT")

这句话:

open(unit=11,file="something.TXT",status="replace")

我的印象是unknown状态的行为完全符合我的预期replace:如果文件不存在,则会创建它.如果确实存在,则替换它.

file-io fortran fortran95

3
推荐指数
1
解决办法
1693
查看次数

C中的子程序是否与Fortran中的子程序相似?

很长一段时间我一直在使用Fortran,最近我决定学习C.虽然我理解C中的函数是如何工作的,但我很难找到有关如何在C中实现与Fortran子程序等效的东西的信息.这个概念是否存在于C语言?

考虑一下这个Fortran代码:

module myMod
  implicit none
  contains

    function func(a, b)
      integer :: func
      integer, intent(IN) :: a, b
      func = a + b
    end function func

    subroutine sub(a, b, c)
      integer, intent(INOUT) :: a, b
      integer, intent(OUT) :: c
      a = a * b
      b = 3 * a
      c = a + b
    end subroutine sub

end module myMod

program example
  use myMod
  implicit none
  integer :: i, j, k

  i = 1
  j = 2

  k = func(i,j) …
Run Code Online (Sandbox Code Playgroud)

c fortran

3
推荐指数
1
解决办法
418
查看次数

自动摘要生成的文档缺少除“__init__”之外的所有 dunder 方法

我正在使用 Sphinx 的自动摘要为模块的每个成员自动生成单独的第一个文件。文档按预期创建,只是生成的第一个文件缺少除__init__.

在我的conf.py我有以下几行:

extensions = [
    'sphinx.ext.autodoc',
    'sphinx.ext.autosummary',
]

autosummary_generate = True
autosummary_imported_members = True
Run Code Online (Sandbox Code Playgroud)

考虑下面的虚拟类,它包含 dunder 和常规公共方法:

class MyClassA:

    def __init__(self):
        r'__init__ docstring'
        pass

    def __call__(self):
        r'__call__ docstring'
        pass

    def __len__(self):
        r'__len__ docstring'
        pass

    def public_method_1(self):
        r'public_method_1 docstring'
        pass

    def public_method_2(self):
        r'public_method_2 docstring'
        pass

Run Code Online (Sandbox Code Playgroud)

在我的第一个主文件中,我设置了自动摘要,如下所示:

.. autosummary::
    :toctree: my_module_members

    my_module.MyClassA
    my_module.MyClassB
Run Code Online (Sandbox Code Playgroud)

/my_module_members正如预期的那样,自动摘要会为模块的每个成员创建一个以单独的第一个文件命名的子目录。但仅__init__在这些自动生成的第一个文件的“方法”部分中列出。例如:

my_module.MyClassA
==================

.. currentmodule:: my_module

.. autoclass:: MyClassA




   .. rubric:: Methods

   .. autosummary::

      ~MyClassA.__init__
      ~MyClassA.public_method_1
      ~MyClassA.public_method_2
Run Code Online (Sandbox Code Playgroud)

因此,在生成的 html 文档中,方法表中仅列出了这三个方法,而没有 …

python magic-methods python-sphinx

3
推荐指数
1
解决办法
1684
查看次数

Lilypond:如何在栏上方添加重复次数

我正在使用Lilypond中有很多重复的分数,其中基本上每个小节都必须重复一定次数.我希望能够在每个栏上面写下它应该重复的次数,类似于下面的分数(不是在Lilypond中创建的):

在此输入图像描述

能够在条形图上方放置一些括号并将"3x"集中在一起会很棒,就像上面的例子一样.到目前为止,我在Lilypond中提出的唯一(临时)解决方案是添加重复条,然后在每个条的第一个音符上方写上"3x"(因为我不能将它集中在条形图上) .它看起来不太好,但完成工作.这个临时解决方案如下所示:

在此输入图像描述

任何关于如何使这个例子看起来更像第一家旅馆Lilypond的建议将非常受欢迎!

repeat lilypond music-notation

2
推荐指数
2
解决办法
1582
查看次数

LilyPond 中的自定义音符头

我正在尝试用 Lilypond 中的自定义图形替换默认的音符头。我已经阅读了 A.10.3 Graphic 下的文档,其中解释了如何使用\markup将图形添加到乐谱中,但是我坚持能够使用它们来替换音符头。我的问题是如何将默认注释头替换为自定义注释头?

lilypond

1
推荐指数
1
解决办法
603
查看次数