SWAnisoRoughness.cpp
Go to the documentation of this file.00001 #include "SWAnisoRoughness.h"
00002
00003 namespace gplib
00004 {
00005 SWAnisoRoughness::SWAnisoRoughness() :
00006 veldiffweight(0.0), anisovelweight(1.0), strikediffweight(0.0),
00007 deltastrikediffweight(0.0)
00008 {
00009 }
00010
00011 SWAnisoRoughness::~SWAnisoRoughness()
00012 {
00013 }
00014
00015 void SWAnisoRoughness::SafeParallel(const ttranscribed &member)
00016 {
00017 const unsigned int length = member.size() / 6;
00018 double roughness = std::abs(member(2 * length));
00019 const int fitexp = GetFitExponent();
00020 const double anglescale = 90.;
00021 for (unsigned int i = 1; i < length; ++i)
00022 {
00023 roughness += veldiffweight * std::pow((member(i + 1 * length)
00024 - member(i - 1 + 1 * length)), fitexp);
00025 roughness += anisovelweight * std::pow(std::abs(member(i + 5
00026 * length)), fitexp);
00027 roughness += strikediffweight * std::pow((member(i + 2 * length))
00028 / anglescale, fitexp);
00029 roughness += deltastrikediffweight * std::pow(std::abs(member(i + 3
00030 * length) / 30), fitexp);
00031 }
00032 SetRMS(std::pow(roughness, 1. / fitexp));
00033 }
00034
00035 double SWAnisoRoughness::PostParallel(const ttranscribed &member)
00036 {
00037 return GetRMS();
00038 }
00039
00040 SWAnisoRoughness::SWAnisoRoughness(const SWAnisoRoughness &Old) :
00041 GeneralObjective(Old), veldiffweight(Old.veldiffweight), anisovelweight(
00042 Old.anisovelweight), strikediffweight(Old.strikediffweight),
00043 deltastrikediffweight(Old.deltastrikediffweight)
00044 {
00045
00046 }
00047 SWAnisoRoughness& SWAnisoRoughness::operator=(
00048 const SWAnisoRoughness& source)
00049 {
00050 if (this == &source)
00051 return *this;
00052 GeneralObjective::operator=(source);
00053 veldiffweight = source.veldiffweight;
00054 anisovelweight = source.anisovelweight;
00055 strikediffweight = source.strikediffweight;
00056 deltastrikediffweight = source.deltastrikediffweight;
00057 return *this;
00058 }
00059 }