ogsens Subroutine

private subroutine ogsens(me, Consta, Concon, Convar, Varcon, Varvar)

NEAR-LINEAR OPTIMIZATION TOOL SENSITIVITY ANALYSIS

2008/01/16 | J. SCHOENMAEKERS | NEW

Type Bound

optgra

Arguments

Type IntentOptional Attributes Name
class(optgra), intent(inout) :: me
integer(kind=ip), intent(out) :: Consta(me%Numcon)

CONSTRAINT STATUS (0=PAS 1=ACT)

real(kind=wp), intent(out) :: Concon(me%Numcon+1,me%Numcon)

SENSITIVITY OF CONTRAINTS+MERIT W.R.T. ACTIVE CONSTRAINTS

real(kind=wp), intent(out) :: Convar(me%Numcon+1,me%Numvar)

SENSITIVITY OF CONTRAINTS+MERIT W.R.T. PARAMETERS

real(kind=wp), intent(out) :: Varcon(me%Numvar,me%Numcon)

SENSITIVITY OF VARIABLES W.R.T. ACTIVE CONSTRAINTS

real(kind=wp), intent(out) :: Varvar(me%Numvar,me%Numvar)

SENSITIVITY OF VARIABLES W.R.T. PARAMETERS -> NOT SCALED


Calls

proc~~ogsens~~CallsGraph proc~ogsens optgra%ogsens proc~ogleft optgra%ogleft proc~ogsens->proc~ogleft proc~ogrigt optgra%ogrigt proc~ogsens->proc~ogrigt

Source Code

   subroutine ogsens(me,Consta,Concon,Convar,Varcon,Varvar)

      !! NEAR-LINEAR OPTIMIZATION TOOL SENSITIVITY ANALYSIS
      !!
      !! 2008/01/16 | J. SCHOENMAEKERS | NEW

      class(optgra),intent(inout) :: me
      integer(ip),intent(out) :: Consta(me%Numcon) !! CONSTRAINT STATUS (0=PAS 1=ACT)
      real(wp),intent(out) :: Concon(me%Numcon+1,me%Numcon) !! SENSITIVITY OF CONTRAINTS+MERIT W.R.T. ACTIVE CONSTRAINTS
      real(wp),intent(out) :: Convar(me%Numcon+1,me%Numvar) !! SENSITIVITY OF CONTRAINTS+MERIT W.R.T. PARAMETERS
      real(wp),intent(out) :: Varcon(me%Numvar,me%Numcon) !! SENSITIVITY OF VARIABLES W.R.T. ACTIVE CONSTRAINTS
      real(wp),intent(out) :: Varvar(me%Numvar,me%Numvar) !! SENSITIVITY OF VARIABLES W.R.T. PARAMETERS
                                                          !! -> NOT SCALED

      real(wp) :: val , sca
      integer(ip) :: var , con , act , par , ind , typ

      ! CONVERGED
      Consta = 0
      do act = 1 , me%Numact
         con = me%Actcon(act)
         Consta(con) = 1
      end do

      ! SENSITIVITY OF CONTRAINTS W.R.T. ACTIVE CONSTRAINTS
      Concon = 0.0_wp
      do con = 1 , me%Numcon + 1
         if ( me%Conact(con)>0 ) Concon(con,con) = 1.0_wp
         if ( me%Conact(con)>0 ) cycle
         me%Conref = me%Conred(con,1:me%Numact)
         me%Conref = me%ogrigt(me%Conref)
         do act = 1 , me%Numact
            ind = me%Actcon(act)
            Concon(con,ind) = -me%Conref(act)
         end do
      end do

      ! SENSITIVITY OF CONSTRAINTS W.R.T. PARAMETERS
      Convar = 0.0_wp
      do con = 1 , me%Numcon + 1
         if ( me%Conact(con)>0 ) cycle
         do var = 1 , me%Numvar
            if ( me%Vartyp(var)==0 ) cycle
            val = me%Sender(con,var)
            do act = 1 , me%Numact
               ind = me%Actcon(act)
               val = val + Concon(con,ind)*me%Sender(ind,var)
            end do
            Convar(con,var) = val
         end do
      end do

      ! SENSITIVITY OF VARIABLES W.R.T. ACTIVE CONSTRAINTS
      Varcon = 0.0_wp
      do var = 1 , me%Numvar
         if ( me%Vartyp(var)/=0 ) cycle
         do act = 1 , me%Numact
            con = me%Actcon(act)
            me%Conref(act) = me%Conder(con,var)
         end do
         me%Conref = me%ogleft(me%Conref)
         me%Conref = me%ogrigt(me%Conref)
         do act = 1 , me%Numact
            con = me%Actcon(act)
            Varcon(var,con) = -me%Conref(act)
         end do
      end do

      ! SENSITIVITY OF VARIABLES W.R.T. PARAMETERS
      Varvar = 0.0_wp
      do par = 1 , me%Numvar
         Varvar(par,par) = 1.0_wp
         if ( me%Vartyp(par)/=1 ) cycle
         do var = 1 , me%Numvar
            if ( me%Vartyp(var)/=0 ) cycle
            val = 0.0_wp
            do act = 1 , me%Numact
               con = me%Actcon(act)
               val = val + Varcon(var,con)*me%Sender(con,par)
            end do
            Varvar(var,par) = val
         end do
      end do

      ! DESCALE SENSITIVITY
      do con = 1 , me%Numcon + 1
         typ = me%Contyp(con)
         sca = me%Consca(con)
         if ( typ<0 ) sca = -sca
         Convar(con,1:me%Numvar) = Convar(con,1:me%Numvar)*sca
         Concon(con,1:me%Numcon) = Concon(con,1:me%Numcon)*sca
         if ( con>me%Numcon ) cycle
         Varcon(1:me%Numvar,con) = Varcon(1:me%Numvar,con)/sca
         Concon(1:me%Numcon+1,con) = Concon(1:me%Numcon+1,con)/sca
      end do

      do var = 1 , me%Numvar
         sca = me%Varsca(var)
         Varcon(var,1:me%Numcon) = Varcon(var,1:me%Numcon)*sca
         Varvar(var,1:me%Numvar) = Varvar(var,1:me%Numvar)*sca
         Convar(1:me%Numcon+1,var) = Convar(1:me%Numcon+1,var)/sca
         Varvar(1:me%Numvar,var) = Varvar(1:me%Numvar,var)/sca
      end do

   end subroutine ogsens