Navigation

    CFD中文网

    CFD中文网

    • Login
    • Search
    • 最新

    求问如何给标量场赋值为实数?

    OpenFOAM
    6
    14
    3608
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • M
      Mr.H last edited by 李东岳

      各位前辈

      forAll(sens,i)
      {
         if(~) 
           sens[i]=1.2;
      }
      

      sens 类型为 volScalarField,这样的操作该怎么实现?

      1 Reply Last reply Reply Quote
      • M
        Mr.H last edited by

        @东岳 求问大神

        1 Reply Last reply Reply Quote
        • 李东岳
          李东岳 管理员 last edited by

          看起来你已经实现了?

          线上CFD课程 7月1日报名截止 http://dyfluid.com/class.html
          CFD高性能服务器 http://dyfluid.com/servers.html

          M 1 Reply Last reply Reply Quote
          • M
            Mr.H @李东岳 last edited by

            @东岳 对,谢谢大神,之前有个变量类型写错了。 不过我还有2个问题:
            1、为何 volScalarField 在声明的时候必须进行初始化?
            2、怎样把 scalar 赋值给 volScalarField 的变量?

            M 1 Reply Last reply Reply Quote
            • M
              Mr.H @Mr.H last edited by

              对于第二个问题,我的解决方法是 volScalarField 1=scalar * volScalarField 2
              volScalarField 2 是值为1 的单位向量。 但有没有更专业的处理方法?

              1 Reply Last reply Reply Quote
              • 李东岳
                李东岳 管理员 last edited by

                为何 volScalarField 在声明的时候必须进行初始化?

                这像是一个规则,目前OpenFOAM不允许这样。

                怎样把 scalar 赋值给 volScalarField 的变量?

                要内部场:

                T.primitiveFieldRef() = 0.0;
                

                要边界场:

                T.BoundaryFieldRef() = 0.0;
                

                线上CFD课程 7月1日报名截止 http://dyfluid.com/class.html
                CFD高性能服务器 http://dyfluid.com/servers.html

                1 Reply Last reply Reply Quote
                • A
                  ars last edited by

                  请问,是不是不能对标量场进行对数log运算?需要把标量场的值转化为实数才可以取对数?
                  比如volscalarField p ,想求得log(p)应该如何操作?

                  浪 1 Reply Last reply Reply Quote
                  • 浪
                    浪迹天大 @ars last edited by

                    @ars Foam::log(p)可以吗?

                    OpenFOAM 学习交流:https://openfoam.top

                    A 1 Reply Last reply Reply Quote
                    • A
                      ars @浪迹天大 last edited by

                      @浪迹天大 您的意思是通过这样定义一个scalar?如果是这样的话,试了一下,不行。
                      我是在functionObjects中想计算一个物理量C。
                      所以在里面定义了volscalarField C。而这个物理量的表达式是通过物理量A,B,D所构成的表达式来进行计算的。
                      A,B也是自己定义的volscalarField,D是volvectorField;
                      表达式大概为C=A/(log(mag(D)/B)。编译时没有问题,但计算这个物理量C时,却报错:
                      Argument of trancendental function not dimensionless
                      把log去掉就完全ok。

                      Z 1 Reply Last reply Reply Quote
                      • Z
                        Zephyr @ars last edited by

                        @ars Openfoam有dimension检查, log是超越函数,要求里面的数必须是无量纲的,因此你只能用这种形式log(p/pInf) 把p的单位消掉。

                        A 1 Reply Last reply Reply Quote
                        • A
                          ars @Zephyr last edited by

                          @Zephyr 您是指这个吗?这样能去单位?
                          pInf()——Return the pressure at infinity.
                          但是我需要取对数的不是压力这个物理量。
                          按这个做法,编译没法通过。
                          请问,openFoam 里面如何去单位?希望详述一下。

                          Z 1 Reply Last reply Reply Quote
                          • Z
                            Zephyr @ars last edited by 李东岳

                            @ars 假设你要算一个log(t), 编译肯定是通过不了的,因为t在openfoam里是有单位的,单位是秒,那么你可以定义一个常数1

                            dimensionedScalar oneSecond
                                (
                                	"oneSecond",
                                	dimTime, // 和变量t具有相同dimension
                                	1
                                );
                            

                            然后计算log(t/oneSecond),这个oneSecond没有任何物理意义,只是帮助你把变量t的单位去掉好通过编译,你要计算的log(p)也是同理

                            第二种方法:直接把openfoam的单位检查关掉,这个我没有研究过,你可以求助谷歌

                            H 1 Reply Last reply Reply Quote
                            • H
                              hongjiewang @Zephyr last edited by

                              @Zephyr 请问我在库中采用了log(p/pSat_),编译可以通过,但是跑算例时会发散,提示这样的错误:Foam::log(Foam::Field<double>&, Foam::UList<double> const&) at ??:? 是因为里面的数太小了吗

                              Z 1 Reply Last reply Reply Quote
                              • Z
                                Zephyr @hongjiewang last edited by

                                @hongjiewang 我直接好家伙,这都两年了居然还回复我。
                                由于种种原因我现在已经不怎么玩OF了,只能给你一些比较通用的建议。首先看这一堆问号大概是segment fault错误,那么我首先猜是产生了异常值导致求解器爆炸,log函数最容易出现的问题就是传入0值和负值,建议你首先检查数值问题。如果不是数值问题,那就单步调试之类的慢慢debug看看怎么回事,你的两个变量是否正确初始化了等等

                                1 Reply Last reply Reply Quote
                                • First post
                                  Last post

                                CFD中文网 | 东岳流体 | 京ICP备15017992号-2
                                论坛登录问题反馈可联系 li.dy@dyfluid.com