找回密码
 注册
查看: 2910|回复: 4

palabos一问

[复制链接]
发表于 2011-11-6 17:24:28 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
我想画矢量图,把速度输出到自己的gmsh格式的一个文件中。

例子cavity2d.cpp中:

  1. IncomprFlowParam<T> parameters(
  2.             (T) 1e-2,  // uMax
  3.             (T) 100.,  // Re
  4.             128,       // N
  5.             1.,        // lx
  6.             1.         // ly
复制代码

computeVelocity(lattice)中的lattice在这里是128X128的数组么?

src\io\serializerIO.hh中:
  1. namespace plb {
  2. 。。。
  3. template<typename T>
  4. void serializerToAsciiStream(DataSerializer const* serializer, std::ostream* ostr, plint numDigits)
  5. {
  6.     serializerToSink(serializer, new AsciiWriter<T>(ostr, numDigits));
  7. }
  8. 。。。
  9. }
复制代码

该怎么调这个serializerToAsciiStream函数,不明白template<typename T>是干什么的?

src\io\serializerIO.cpp中:
  1. namespace plb {
  2. 。。。
  3. /* *************** Free functions ************************************ */

  4. void serializerToBase64Stream(DataSerializer const* serializer, std::ostream* ostr, bool enforceUint)
  5. {
  6.     serializerToSink (
  7.             serializer,
  8.             new Base64Writer(ostr, enforceUint,
  9.                                 global::IOpolicy().getEndianSwitchOnBase64out()) );
  10. }
  11. 。。。
  12. }
复制代码


函数serializerToBase64Stream前面没有template<typename T>之类的,在程序里直接调,没问题。那个输出vtk的例子就用的这个函数。我是在vtk的例子的基础上改。

现在用serializerToBase64Stream,可以把速度写到一个文件里,但不是我要的格式。换成serializerToAsciiStream,调着有问题。

谢谢帮助

[ 本帖最后由 shirazbj 于 2011-11-6 17:27 编辑 ]
发表于 2011-11-7 04:31:28 | 显示全部楼层

回复 1# shirazbj 的帖子

1. 数组大小 (N+1)*(N+1),程序中可以通过下面方法的其大小
    const plint nx = parameters.getNx();
    const plint ny = parameters.getNy();
2. template<typename T>:  T 模板类中的数据类型。在实现时可以采取如下定义
    typedef double T,或 float。 则表示程序中所有T 相关的数据类型采取实现时的定义。 参见C++模板类。
3. serializerToAsciiStream 调用有何问题!  建议直接使用
    plb_ofstream 直接输出你关心无格式场!
  参见 http://blog.sina.com.cn/vonkarman

[ 本帖最后由 xhbj 于 2011-11-6 20:43 编辑 ]
 楼主| 发表于 2011-11-7 04:44:11 | 显示全部楼层
程序里调用如下:

&#160; &#160; plint numDigits=8;
&#160; &#160; serializerToAsciiStream(serializer, ostr, numDigits);
其中 DataSerializer const* serializer, std::string const& name

但编译错误:
/home/peter/x.hh: In member function ‘void plb::GMSHDataWriter3D::writeDataField(const plb:ataSerializer*, const std::string&, plb::plint)’:
/home/peter/x.hh:86: error: no matching function for call to ‘serializerToAsciiStream(const plb:ataSerializer*&, std:fstream*&, plb::plint&’

怎么不匹配 ?


先谢了。
发表于 2011-11-7 04:53:56 | 显示全部楼层

回复 3# shirazbj 的帖子

检查你的变量
serializerToAsciiStream(DataSerializer const* serializer, std:: ostream* ostr, plint numDigits)
ostr为输出流……

[ 本帖最后由 xhbj 于 2011-11-6 20:55 编辑 ]
 楼主| 发表于 2011-11-7 10:39:30 | 显示全部楼层
在中间加<T>可以了.
serializerToAsciiStream<T>(serializer, ostr, numDigits);

[ 本帖最后由 shirazbj 于 2011-11-7 13:22 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表