SEIMS icon indicating copy to clipboard operation
SEIMS copied to clipboard

Spatially Explicit Integrated Modeling System --- open-source, cross-platform, and high performance computation

Results 6 SEIMS issues
Sort by recently updated
recently updated
newest added

## STL中容器的释放:到底如何使用erase() STL中erase()函数的功能是用来删除容器中元素的,在析构函数中释放容器内内存资源尤其重要。 然而,看似简单的动作,对不同类型的容器,内部缺做了截然不同的事情,而且不同编译器的实现也有差异。 - 容器按内存分配方式可以分为链表容器和数组容器,所谓链表容器是指一种表现方式,包括list、slist等这样基于节点的容器(动态分配内存块)和set、map、multiset、multimap等关联容器(平衡树实现),而数组容器则指的是在一块连续的内存上保存元素的连续内容容器,比如vector、deque、string等。 - 先看结论 ```cpp /// 链表容器,以map为例 for (map::iterator it = map1.begin(); it != map1.end(); ) { //it = map1.erase(it); /// VS支持,Intel C++ 12,GCC 4.4.6不支持 map1.erase(it++);...

Protocol
CodeMgr

# Field版本目前的修改 ## 1 模型输出的修改 主要是在data模块增加了id=9999的情况,在河道汇流、泥沙模块也有增加了对id=9999的输出处理。如泥沙模块: ```cpp for (int i = 0; i < nReaches; i++) { int reachIndex = it->second[i]; // index in the array, which is equal to...

# Classified by the characteristics of calculation ## 1. Independent calculation / 计算独立型 Simply add a `#pragma omp parallel for` before the for-loop. ```cpp #pragma omp parallel for for (int...

## OpenMP内抛出异常 SEIMS中异常捕捉是一个继承于`exception`的`ModelException`类,在各个模块中,如遇到异常,只需要抛出异常,即`throw ModelException()`,捕获异常并打印错误信息则在主函数调用处,即`invoke.cpp`。 在具体模块执行计算任务时,子流域内部栅格或基于流向分层的每一层内部栅格间的计算相互独立,可以很方便的利用共享内存的方式(OpenMP)进行线程级的并行,比如,下面一段代码我们经常用到: ```cpp omp_set_num_threads(4); #pragma omp parallel for for (int i = 0; i < m_nCells; i++) { DoSomethingThatMayThrowAnException(); if (ExceptionOccurred) { throw ModelException("MID", "FunctionName", "ErrorMessage!\n"); }...

question

## 三个常用操作系统和C++编译器下,CI的具体配置如下。 + 采用AppVeyor进行Windows平台的代码CI,配置文件为`appveyor.yml`,具体配置为: + GDAL-1.11.4-64bit + mongo-c-driver-1.5.5-64bit + MS-MPI v8.0 64bit + MSVC 2013 因此,AppVeyor构建的是64位版本的SEIMS模型。 + 采用Travis CI进行linux平台下GCC编译器、mac平台下Clang编译器的代码CI,配置文件为`.travis.yml`及`doc/ci`目录下的shell脚本,具体配置分别为: + linux-gcc48 + GCC-4.8 + GDAL-1.10.1 + mongo-c-driver-1.6.1 + mpich2-3.0.4 +...

CodeMgr

## 利用[Visual Leak Detector (VLD) 2.5.1](http://vld.codeplex.com/) 检查了模型框架代码的内存泄漏问题 代码更改详见[pull7](https://github.com/lreis2415/SEIMS/pull/7)。 其实说白了内存泄漏就是没有把new和delete配对使用,但是实际编码中,尤其是涉及复杂类与类之间相互调用的时候,理清什么时候释放哪块内存是不太容易的。 我这次主要检查了**数组**、含有自定义数据类型(或类实例)的**容器**(vector,map等)以及**复杂类**的释放及析构函数,这些可能涵盖了我们日常编程常见的内存泄漏问题。 对于复杂类的编写,大家要遵循“Rules of three”原则,即如果你的类需要以下任意一个函数,那么就请显式写出所有三个: + 复制构造函数(Copy Constructor) + 赋值操作符(Assignment Operator) + 析构函数(Destructor) 点[这里扩展阅读](http://stackoverflow.com/questions/4172722/what-is-the-rule-of-three)。 > 当然,代码依然存在潜在问题,大家在扩充模块的同时,也可以多多关注框架的bug,并修复。

Protocol