CriteriaReductionMeritFunctionCheck.cpp

Go to the documentation of this file.
00001 /* ****************************************************************** **
00002 **    OpenSees - Open System for Earthquake Engineering Simulation    **
00003 **          Pacific Earthquake Engineering Research Center            **
00004 **                                                                    **
00005 **                                                                    **
00006 ** (C) Copyright 2001, The Regents of the University of California    **
00007 ** All Rights Reserved.                                               **
00008 **                                                                    **
00009 ** Commercial use of this program without express permission of the   **
00010 ** University of California, Berkeley, is strictly prohibited.  See   **
00011 ** file 'COPYRIGHT'  in main directory for information on usage and   **
00012 ** redistribution,  and for a DISCLAIMER OF ALL WARRANTIES.           **
00013 **                                                                    **
00014 ** Developed by:                                                      **
00015 **   Frank McKenna (fmckenna@ce.berkeley.edu)                         **
00016 **   Gregory L. Fenves (fenves@ce.berkeley.edu)                       **
00017 **   Filip C. Filippou (filippou@ce.berkeley.edu)                     **
00018 **                                                                    **
00019 ** Reliability module developed by:                                   **
00020 **   Terje Haukaas (haukaas@ce.berkeley.edu)                          **
00021 **   Armen Der Kiureghian (adk@ce.berkeley.edu)                       **
00022 **                                                                    **
00023 ** ****************************************************************** */
00024                                                                         
00025 // $Revision: 1.1 $
00026 // $Date: 2003/03/04 00:39:23 $
00027 // $Source: /usr/local/cvs/OpenSees/SRC/reliability/analysis/meritFunction/CriteriaReductionMeritFunctionCheck.cpp,v $
00028 
00029 
00030 //
00031 // Written by Terje Haukaas (haukaas@ce.berkeley.edu)
00032 //
00033 
00034 #include <CriteriaReductionMeritFunctionCheck.h>
00035 #include <MeritFunctionCheck.h>
00036 #include <ReliabilityConvergenceCheck.h>
00037 #include <math.h>
00038 #include <Vector.h>
00039 
00040 
00041 CriteriaReductionMeritFunctionCheck::CriteriaReductionMeritFunctionCheck(ReliabilityConvergenceCheck *passedReliabilityConvergenceCheck)
00042 :MeritFunctionCheck()
00043 {
00044         theReliabilityConvergenceCheck = passedReliabilityConvergenceCheck;
00045 }
00046 
00047 CriteriaReductionMeritFunctionCheck::~CriteriaReductionMeritFunctionCheck()
00048 {
00049 }
00050 
00051 
00052 
00053 
00054 
00055 
00056 
00057 int
00058 CriteriaReductionMeritFunctionCheck::check(Vector u_old, 
00059                                                                   double g_old, 
00060                                                                   Vector grad_G_old, 
00061                                                                   double stepSize,
00062                                                                   Vector stepDirection,
00063                                                                   double g_new, 
00064                                                                   Vector grad_G_new)
00065 {
00066         // New point in standard normal space
00067         Vector u_new = u_old + stepSize*stepDirection;
00068 
00069 
00070         // Number of convergence criteria
00071         int numCrit = theReliabilityConvergenceCheck->getNumberOfCriteria();
00072 
00073 
00074         // Initial declarations
00075         int i;
00076         Vector oldCriteriaValues(numCrit);
00077         Vector newCriteriaValues(numCrit);
00078 
00079 
00080         // Convergence checks for the old point
00081         theReliabilityConvergenceCheck->check(u_old,g_old,grad_G_old);
00082         for (i=1; i<=numCrit; i++) {
00083                 oldCriteriaValues(i-1) = theReliabilityConvergenceCheck->getCriteriaValue(i);
00084         }
00085         
00086 
00087         // Convergence checks for the new point
00088         theReliabilityConvergenceCheck->check(u_new,g_new,grad_G_new);
00089         for (i=1; i<=numCrit; i++) {
00090                 newCriteriaValues(i-1) = theReliabilityConvergenceCheck->getCriteriaValue(i);
00091         }
00092 
00093 
00094         // All criteria must have improved for the step to be OK
00095         bool OK = true;
00096         for (i=1; i<=numCrit; i++) {
00097                 if (newCriteriaValues(i-1)>oldCriteriaValues(i-1)) {
00098                         OK = false;
00099                 }
00100         }
00101 
00102 
00103         // Return
00104         if (OK) {
00105                 return 1;
00106         }
00107         else {
00108                 return -1;
00109         }
00110 }
00111 
00112 
00113 
00114 
00115 
00116 double
00117 CriteriaReductionMeritFunctionCheck::getMeritFunctionValue(Vector u, 
00118                                                                                                   double g, 
00119                                                                                                   Vector grad_G)
00120 {
00121         opserr << "CriteriaReductionMeritFunctionCheck::getMeritFunctionValue() -- this method" << endln
00122                 << " is not implemented in this specific class." << endln;
00123 
00124         return 0.0;
00125 }
00126 
00127 int
00128 CriteriaReductionMeritFunctionCheck::updateMeritParameters(Vector u, 
00129                                                                                                   double g, 
00130                                                                                                   Vector grad_G)
00131 {
00132         opserr << "CriteriaReductionMeritFunctionCheck::updateMeritParameters() -- this method" << endln
00133                 << " is not implemented in this specific class." << endln;
00134 
00135         return 0;
00136 }

Generated on Mon Oct 23 15:05:25 2006 for OpenSees by doxygen 1.5.0