小编kva*_*our的帖子

Fortran 类似于 C++ 函数参数

在 C++ 中,可以通过各种选项将参数传递给函数(按值传递、引用、指针、const 引用、const 指针等)。我想知道所有这些选项的 Fortran 模拟是什么。这种模拟是从概念的角度来看的,而不是从互操作性的角度来看。

据我所知,Fortran 通过引用传递其参数,此规则有一些例外(非连续数组)。考虑到这一点,以下转换是否正确,或者是否可以给出更好的属性?

  • void f(X x); // Pass by value

    这只是传递的原始值的副本

    SUBROUTINE f(x)
       TYPE(X), VALUE :: x
       ...
    END SUBROUTINE f
    
    Run Code Online (Sandbox Code Playgroud)
  • void f(X &x); // Pass by reference

    这x是一个引用,其值已更新。由于引用传递是 Fortran 中的“默认值”,我看到剩下两个可能的选项:参数 anINTENT(OUT)或INTENT(INOUT)

    SUBROUTINE f(x)
       TYPE(X), INTENT([IN]OUT) :: x
       ...
    END SUBROUTINE f
    
    Run Code Online (Sandbox Code Playgroud)
  • void f(X const &x); // Pass by reference-to-const

    这x是一个无法更新其值的引用。

    SUBROUTINE f(x)
       TYPE(X), INTENT(IN) :: x
       ...
    END SUBROUTINE f
    
    Run Code Online (Sandbox Code Playgroud)
  • void f(X *p); // Pass by …

fortran

5
推荐指数
0
解决办法
392
查看次数

在AWS实例中设置环境变量

我使用此资源在EC2中创建了一个带有terraform的AMI:

resource "aws_instance" "devops-demo" {
  ami           = "jnkdjsndjsnfsdj"
  instance_type = "t2.micro"
  key_name      = "demo-devops"
  user_data     = "${file("ops_setup.sh")}"
}
Run Code Online (Sandbox Code Playgroud)

用户数据执行安装Java JRE 的shell脚本:

  sudo yum remove java-1.7.0-openjdk -y
  sudo wget -O /opt/server-jre-8u172-linux-x64.tar.gz --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u172-b11/a58eab1ec242421181065cdc37240b08/server-jre-8u172-linux-x64.tar.gz"
  sudo tar xzf /opt/server-jre-8u172-linux-x64.tar.gz
  export JAVA_HOME=/jdk1.8.0_172
  export JRE_HOME=/jdk1.8.0_171/jre
  export PATH=$JAVA_HOME/bin:$PATH
Run Code Online (Sandbox Code Playgroud)

但是没有一个环境变量可行.但是,如果我通过ssh连接到实例并执行export命令,它可以正常工作.

有没有办法用terraform定义环境变量?

linux environment-variables amazon-ec2 amazon-web-services terraform

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

MT19937 不会通过将种子值保持为常数来重现相同的伪随机序列

我正在 Fortran 90/95 的 Monte Carlo 模拟中编写一个检查点函数,我使用的编译器是 ifort 18.0.2,在详细说明我正在使用的伪随机生成器的版本之前:

A C-program for MT19937, with initialization, improved 2002/1/26.
Coded by Takuji Nishimura and Makoto Matsumoto.

Code converted to Fortran 95 by Josi Rui Faustino de Sousa
Date: 2002-02-01
Run Code Online (Sandbox Code Playgroud)

源代码见mt19937。

我的蒙特卡罗模拟代码的一般结构如下:

program montecarlo
 call read_iseed(...)
 call mc_subroutine(...)
end 
Run Code Online (Sandbox Code Playgroud)

内 read_iseed

subroutine read_iseed(...)
  use mt19937

    if (Restart == 'n') then

    call system('od -vAn -N4 -td4 < /dev/urandom > '//trim(IN_ISEED)
    open(unit=7,file=trim(IN_ISEED),status='old')
    read(7,*) i
    close(7)

    !This is only used to initialise the PRNG …
Run Code Online (Sandbox Code Playgroud)

random fortran mersenne-twister

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

使用%d会在Awk程序中给出奇怪的舍入值

当我在某些记录集上执行求和时,我得到了奇怪的答案.在一种情况下,我没有使用%d,在下一种情况下我使用的是%d

使用%d之和的第一个表达式

 awk -F"|" '(NR > 0 && NR < 36) {sum +=$150} END {printf ("%d\n",sum)}' muar.txt
-|33
Run Code Online (Sandbox Code Playgroud)

没有%d

 awk -F"|" '(NR > 0 && NR < 36) {sum +=$150} END {printf ("\n"sum)}' muar.txt
-|34
Run Code Online (Sandbox Code Playgroud)

为什么它从34变为33

只是添加更多信息,直到34行我得到的总和为33.03而第35行的值为0.97所以实际上它应该是34而不是33

根据测试评论的附加细节 - 您可以创建一个文件,让我们的a.txt只有一个字段.第一个值是空白第二个是1.95然后连续18次097,然后是0.98然后是6次0.97然后是0.98然后是3次0.97然后是0.98 2次然后是2次0.97

或者,您可以连续使用1.95 - 1次,0.97 - 29次和0.98次4次

floating-point awk

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

如何从Shell脚本编辑kubernetes资源

我浏览了文档以使用kubectl edit命令编辑kubernetes资源。执行命令后,将在编辑器中打开YAML格式的文件,在其中可以根据需要更改值并保存。我正在尝试通过执行这些步骤sed。如何实现以下步骤?

  1. 执行kubectl edit部署资源
  2. 设置从true到的值false(使用sed)
  3. 保存更改

我试图通过以下方式实现这一目标:

$ kubectl edit deployment tiller-deploy -n kube-system | \
   sed -i "s/\(automountServiceAccountToken:.*$\)/automountServiceAccountToken: true/g"`
Run Code Online (Sandbox Code Playgroud)

shell sed kubectl

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

如何在从睡眠中醒来时设置 cronjob?

例如,如果您希望在每次重新启动后运行一个 cron 作业,您可以像这样将 sth 添加到您的 cron 文件中:

@reboot ./do_sth
Run Code Online (Sandbox Code Playgroud)

有没有类似从睡眠状态醒来的东西?

linux cron power-management crontrigger

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

计算所有子目录unix中的总目录和文件

我正在尝试计算 Unix 目录中所有子目录中的子目录和所有文件总数。我试过这个:

ls -lR | grep ^d | wc -l
Run Code Online (Sandbox Code Playgroud)

但这只是给了我总的子目录,而不是总文件。我将如何修改它,或者有没有办法从一个命令中找出两个数字?还是我应该把它分成两部分?

unix bash scripting grep ls

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

如何列出所有子目录的目录大小?

从shell,我需要列出所有子目录的大小.我目前正在使用:

du -hs * | sort -hr 
Run Code Online (Sandbox Code Playgroud)

但是,这只会降低一级,并且不会遍历目录树.

linux bash shell

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

如何使用空格和逗号连接行

我的文件包含以下内容:

IP
111
22
25
Run Code Online (Sandbox Code Playgroud)

我想以 格式打印输出IP 111,22,25。

我已经尝试过tr ' ' ,,但不起作用

bash shell awk cut tr

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

根据匹配列合并许多文件

我有很多文件(我以5为例)

如果与第一个文件不匹配,则应在输出中附加0

文件1

1001 1 2
1002 1 2
1003 3 5
1004 6 7
1005 8 9
1009 2 3
Run Code Online (Sandbox Code Playgroud)

文件2

1002 7
1003 8
Run Code Online (Sandbox Code Playgroud)

文件3

1001 5
1002 3
Run Code Online (Sandbox Code Playgroud)

文件4

1002 10
1004 60
1007  4
Run Code Online (Sandbox Code Playgroud)

文件5

1001 102
1003 305
1005 809
Run Code Online (Sandbox Code Playgroud)

期望的输出

1001 1 2 0 5  0 102
1002 1 2 7 3 10   0
1003 3 5 8 0  0 305
1004 6 7 0 0 60   0
1005 8 9 0 0  0 …
Run Code Online (Sandbox Code Playgroud)

bash awk

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