切换到宽版
  • 广告投放
  • 稿件投递
  • 繁體中文
    • 2818阅读
    • 0回复

    [原创]CODEV中引入自定义间断面 [复制链接]

    上一主题 下一主题
    离线ght970201
     
    发帖
    17
    光币
    50
    光券
    0
    只看楼主 倒序阅读 楼主  发表于: 2012-11-03
    今天,我解决了CODEV中引入自定义间断面的问题。积累了经验,与大家分享。 x2fqfrr_]  
    $27OrXQ|  
      按照说明书,有间断的面最好使用USERSUR2,但是,当我打开他的模板后,发现比较复杂,这是一个专门为菲涅尔透镜的生成而编制的程序参数很多,复杂之处在于处理与各个间断点有关的问题,具体我也没太看懂,只知道是反复叠代找到交点。 bO$KV"*!  
    8[@Y`j8  
      但是,虽然codev的说明挡中强调USERSUR型子程序只适合于连续表面,但考虑到,光线追迹实际上只需要知道表面的函数和该点的导数,所以,如果在程序中仔细定义间断点处的导数,就可以当成连续面来处理。 OSuQ7V  
    g3'dkS!  
       我的解决办法是,利用有限差分计算导数,而且是前后差分导数都计算出来,做对比,取绝对值小的那一个作为导数。因为,很容易理解,如果某个差分取在了间断点的两侧,一定很大。另一个较小的 ]srL>29_b  
    CEkf0%YJ  
    就是在间断点同侧取的。数学上来说,相当于左右导数。 Q& d;UVp  
    g'km*EV  
      计算表明,比较OK。 !b0A %1W;  
    -h|[8UG^b  
          USERSUR.for的使用比较简单。只需把CODEV自带的程序,即, USERSUR.for改成自己的程序名字,再把内容修改就可以。重要的参数就是输出导数。其他像锥常数,曲率等都不用。虽然,允许使用MODE参数选择用codev自己用有限差分计算导数,但最好别这样。应按如上所述处理,比较安全。 g@O?0,+1  
    #(}{*d R  
      此外,生成dll文件要使用nmake技术。注意环境变量要设对。此外,如果还出现找不到文件的问题。 66B,Krz1n  
    {gEz;:!):  
    那就手动找文件,通常在fortran的安装目录的某些子目录中,用windows的搜索功能就可找到,然后考备到当前目录下,通常是c:\CVuser. 其他问题在codev的帮助文档中很容易找到。 (oCpQDab@  
    Yt_tAm  
    在nmake语句中,要注意空格。例如,nmake  -f *******
    1条评分光币+20
    cyqdesign 光币 +20 原创内容,奖励! 2012-11-03
     
    分享到