小编Cha*_*les的帖子

是否可以确定哪个Fortran编译器生成了".mod"文件?

假设我的机器上已经安装了一个软件包,我想知道是否需要重新生成模块include files(.mod)以使它们与我的其余编译兼容.有没有办法做到这一点?

fortran module compilation

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

cuda python GPU numbapro 3d loop poor performance

I am trying to set up a 3D loop with the assignment

 C(i,j,k) = A(i,j,k) + B(i,j,k)
Run Code Online (Sandbox Code Playgroud)

using Python on my GPU. This is my GPU:

http://www.geforce.com/hardware/desktop-gpus/geforce-gt-520/specifications

The sources I'm looking at / comparing with are:

http://nbviewer.ipython.org/gist/harrism/f5707335f40af9463c43

http://nbviewer.ipython.org/github/ContinuumIO/numbapro-examples/blob/master/webinars/2014_06_17/intro_to_gpu_python.ipynb

It's possible that I've imported more modules than necessary. This is my code:

import numpy as np
import numbapro
import numba
import math
from timeit import default_timer as timer
from numbapro import cuda
from numba import *

@autojit
def myAdd(a, b):
  return …
Run Code Online (Sandbox Code Playgroud)

python cuda gpu pycuda numba-pro

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

Fortran过程指向派生类型中子例程的指针

在Fortran中,我需要一个派生类型中的过程指针,它可以指向几个子例程中的一个.这个问题似乎在SO上很常见:

Fortran将过程保存为派生类型的属性

在Fortran 2003中键入绑定过程重载

此类型绑定通用子例程调用没有匹配的特定子例程

带有过程参数的通用类型绑定过程

键入绑定过程作为参数

仅举几例.第一个参考文献非常好地提供了这个函数问题的答案.

但是,在类型绑定过程指针指向子例程的情况下,我仍然不清楚开发此类代码的方法.困难似乎是没有与返回的内容相关联的类型(因为没有真正"返回").

我还想指出的是,虽然一个简单的解决方案可以在FORTRAN的一个较新的标准(2003,2008)的存在,这种解决方案可能无法在所有的编译器,这可能是未来工作的问题的细微差别.所以我对编译器友好的解决方案很感兴趣.

我有一个当前有效的小代码(如下所示),但在我的大代码中,我在文件中遇到内部编译器错误(也显示如下),我在派生类型中使用过程指针.我的问题是:我可以对下面的代码做些什么

1)严格使用显式接口

2)最大化传递给编译器的信息

3)确保代码在尽可能多的编译器之间可移植(即使用fortran 90/95标准).

在多大程度上可以满足上述要求(1是最重要的)?是否有可能满足上述所有标准?我知道"满足所有这些标准"是主观的,但我认为对于关于函数而不是子例程的相同问题,答案是'是'.

 gcc version 5.1.0 (i686-posix-dwarf-rev0, Built by MinGW-W64 project)
Run Code Online (Sandbox Code Playgroud)

小代码:

  module subs_mod
  implicit none
  public :: add,mult
  contains
  subroutine add(x,y,z)
    implicit none
    integer,intent(inout) :: x
    integer,intent(in) :: y,z
    x = y+z
  end subroutine
  subroutine mult(x,y,z)
    implicit none
    integer,intent(inout) :: x
    integer,intent(in) :: y,z
    x = y*z
  end subroutine
  end module

  module type_A_mod
  use subs_mod
  implicit none
  public :: type_A,init,operate
  type type_A
    procedure(),pointer,nopass :: …
Run Code Online (Sandbox Code Playgroud)

fortran procedure explicit-interface subroutine

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

fortran运算符重载:函数或子例程

我最近将我的.f90代码更新为.f03,我期待看到加速,因为我的旧版本涉及许多分配和解除分配(7个3D阵列 - 45x45x45)在do循环内的每次迭代(总共4000个).使用派生类型,我在模拟开始时分配这些数组,并在结束时释放它们.我以为我会看到加速,但它实际上运行得慢得多(30分钟而不是23分钟).

我运行了一个分析器,看起来加/减/乘/除运算符需要相对较长的时间.除了标准变化的变化之外,就我所知,运营商是唯一的区别.我想知道这是否是因为函数在每次操作期间都返回了字段数量的新副本.

所以这是我的问题:如果我将函数更改为子例程以便这些字段通过引用传递(我认为?),它可能运行得更快吗?此外,如果这更快,更优选,那么为什么所有这些示例都显示运算符重载的函数而不是使用子例程?我觉得我错过了什么.

具有运算符重载的函数的引用:

http://www.mathcs.emory.edu/~cheung/Courses/561/Syllabus/6-Fortran/operators.html

http://research.physics.illinois.edu/ElectronicStructure/498-s97/comp_info/overload.html

https://web.stanford.edu/class/me200c/tutorial_90/13_extra.html

https://www.ibm.com/developerworks/community/blogs/b10932b4-0edd-4e61-89f2-6e478ccba9aa/entry/object_oriented_fortran_does_fortran_support_operator_overloading55?lang=en

这是我的一个运营商的例子:

    function vectorVectorDivide(f,g) result(q)
      implicit none
      type(vectorField),intent(in) :: f,g
      type(vectorField) :: q
      q%x = f%x / g%x; q%y = f%y / g%y; q%z = f%z / g%z
      q%sx = f%sx; q%sy = f%sy; q%sz = f%sz
    end function
Run Code Online (Sandbox Code Playgroud)

任何帮助或信息都非常感谢!

fortran function operator-overloading gfortran subroutine

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

Ipython笔记本在Ipython.Display模块中对齐Latex方程式

我正在使用ipython notebook来编写具有以下模块的乳胶方程式

from IPython.display import display, Math, Latex
Run Code Online (Sandbox Code Playgroud)

一个简单的示例代码可能如下所示:

display(Math('a = \\frac{1}{2}'))
display(Math('b = \\frac{1}{3}'))
display(Math('c = \\frac{1}{4}'))
Run Code Online (Sandbox Code Playgroud)

哪个会输出:

a = 1/2
b = 1/3
c = 1/4
Run Code Online (Sandbox Code Playgroud)

以漂亮的打印格式.有没有办法,我可以以某种方式在列中对齐,如:

a = 1/2      b = 1/3      c = 1/4
Run Code Online (Sandbox Code Playgroud)

?我知道标记允许HTML使用,但是这个标记被输入到基于代码的单元格的输入中.任何帮助/建议非常感谢!!

html css python latex ipython

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

在 Fortran 中按名称获取文件单元,反之亦然

Fortran 90 有没有办法通过名称获取文件单元和通过单元号获取文件名?我知道这会很昂贵,但是我有很多文件名,我希望在创建它们后能够在子例程中重新访问它们。

string io fortran

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

fortran运算符重载(=)

有没有办法重载=运算符,以便您可以编写如下示例中的赋值:

  module constants_mod
    integer,parameter :: dpn = selected_real_kind(14)
  end module

  module vectorField_mod
    use constants_mod
    implicit none
    private

    public :: vectorField
    public :: allocateX,allocateY,allocateZ
    public :: delete
    ! public :: operator(=)

    type vectorField
      integer,dimension(3) :: sx,sy,sz
      real(dpn),dimension(:,:,:),allocatable :: x,y,z
    end type

  interface delete
    module procedure deallocateVectorField
  end interface

  ! interface operator (=)
  !   module procedure vectorAssign
  ! end interface

  contains

    ! function vectorAssign(f) result(q)
    !   implicit none
    !   real(dpn),intent(in) :: f
    !   type(vectorField) :: q
    !   q%x = f; q%y = …
Run Code Online (Sandbox Code Playgroud)

oop fortran operator-overloading gfortran

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