source: src/base/helper.cpp@ d24c2f

Last change on this file since d24c2f was dfed1c, checked in by Julian Iseringhausen <isering@…>, 14 years ago

Major vmg update.

git-svn-id: https://svn.version.fz-juelich.de/scafacos/trunk@1136 5161e1c8-67bf-11de-9fd5-51895aff932f

  • Property mode set to 100644
File size: 2.2 KB
Line 
1/**
2 * @file helper.cpp
3 * @author Julian Iseringhausen <isering@ins.uni-bonn.de>
4 * @date Tue Apr 5 21:03:47 2011
5 *
6 * @brief Provides various helper functions.
7 *
8 */
9
10#ifdef HAVE_CONFIG_H
11#include <config.h>
12#endif
13
14#include <cstring>
15#include <string>
16
17#include "base/helper.hpp"
18#include "base/index.hpp"
19#include "base/vector.hpp"
20#include "grid/grid.hpp"
21
22using namespace VMG;
23
24char* Helper::GetCharArray(const std::string& str)
25{
26 int size = str.size();
27
28 char* rval = new char[size+1];
29
30 strncpy(rval, str.c_str(), size);
31
32 rval[size] = '\0';
33
34 return rval;
35}
36
37std::string Helper::ReplaceWhitespaces(const char* buffer, const char* replace)
38{
39 size_t pos;
40
41 std::string str(buffer);
42
43 while ((pos = str.find(' ')) != std::string::npos)
44 str.replace(pos, 1, replace);
45
46 return str;
47}
48
49vmg_float Helper::InterpolateTrilinear(const Vector& point, const Grid& grid)
50{
51 vmg_float interpolate_vals[4], grid_vals[8];
52
53 const Index index_global = (point - grid.Extent().Begin()) / grid.Extent().MeshWidth();
54 const Index index_local = index_global - grid.Global().BeginLocal() + grid.Local().Begin();
55 const Vector coord = (point - grid.Extent().Begin() - index_global * grid.Extent().MeshWidth()) / grid.Extent().MeshWidth();
56
57 grid_vals[0] = grid.GetVal(index_local.X() , index_local.Y() , index_local.Z() );
58 grid_vals[1] = grid.GetVal(index_local.X()+1, index_local.Y() , index_local.Z() );
59 grid_vals[2] = grid.GetVal(index_local.X() , index_local.Y()+1, index_local.Z() );
60 grid_vals[3] = grid.GetVal(index_local.X()+1, index_local.Y()+1, index_local.Z() );
61 grid_vals[4] = grid.GetVal(index_local.X() , index_local.Y() , index_local.Z()+1);
62 grid_vals[5] = grid.GetVal(index_local.X()+1, index_local.Y() , index_local.Z()+1);
63 grid_vals[6] = grid.GetVal(index_local.X() , index_local.Y()+1, index_local.Z()+1);
64 grid_vals[7] = grid.GetVal(index_local.X()+1, index_local.Y()+1, index_local.Z()+1);
65
66 for (int i=0; i<4; ++i)
67 interpolate_vals[i] = (1.0 - coord.X()) * grid_vals[2*i] + coord.X() * grid_vals[2*i+1];
68
69 for (int i=0; i<2; ++i)
70 interpolate_vals[i] = (1.0 - coord.Y()) * interpolate_vals[2*i] + coord.Y() * interpolate_vals[2*i+1];
71
72 return (1.0 - coord.Z()) * interpolate_vals[0] + coord.Z() * interpolate_vals[1];
73}
Note: See TracBrowser for help on using the repository browser.