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; //we have 6 parameters in the model, so size/6 layers
00018         double roughness = std::abs(member(2 * length)); // the loop starts at 1, so we skip this value in the 2nd summation
00019         const int fitexp = GetFitExponent();
00020         const double anglescale = 90.; //value for phi from 0 to 180
00021         for (unsigned int i = 1; i < length; ++i) // for all layers except the top
00022           {
00023             roughness += veldiffweight * std::pow((member(i + 1 * length)
00024                 - member(i - 1 + 1 * length)), fitexp); //minimize difference in S velocity between layers
00025             roughness += anisovelweight * std::pow(std::abs(member(i + 5
00026                 * length)), fitexp); //minimize anisovel factor in each layer
00027             roughness += strikediffweight * std::pow((member(i + 2 * length))
00028                 / anglescale, fitexp); //minimize strike within each layer
00029             roughness += deltastrikediffweight * std::pow(std::abs(member(i + 3
00030                 * length) / 30), fitexp); //minimize deltaangle in each layer (for a range :-60/ 60)
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   }

Generated on Tue May 4 16:52:15 2010 for GPLIB++ by  doxygen 1.5.8