Exemplo n.º 1
0
def residuals(f, g, s, x, dr, nodes, weights, p, diff=True):

    N, n_x = x.shape

    dr.set_values(x)

    output = numpy.zeros((N, n_x))

    if not diff:
        for i in range(nodes.shape[0]):
            E = nodes[i, :][None, :].repeat(N, axis=0)
            S = g(s, x, E, p)
            X = dr.interpolate(S)
            t = f(s, x, E, S, X, p)
            output += weights[i]*t
        return output

    if diff:

        output_x = scipy.sparse.csr_matrix((N*n_x, N*n_x))

        for i in range(nodes.shape[0]):
            E = nodes[i, :][None, :].repeat(N, axis=0)
            S, S_s, S_x, S_E = g(s, x, E, p, diff=True)
            X, X_S, X_x = dr.interpolate(S, deriv=True, deriv_X=True)
            R, R_s, R_x, R_E, R_S, R_X = f(s, x, E, S, X, p, diff=True)

            output += weights[i]*R

            t1 = weights[i]*(R_x + smult(R_S, S_x) + smult(R_X, smult(X_S, S_x)))  # N.n_x.n_x
            t1 = serial_to_full(t1)
            t2 = weights[i] * serial_to_full(R_X) @ diag_to_full(X_x)
            output_x += t1 + t2

        return output, output_x
Exemplo n.º 2
0
 def g(self, s, x, e, p, derivs=True):
     if not derivs:
         a = self.__a(s, x, p, derivs=False)[0]
         return self.__g(s, x, a, e, p, derivs=False)
     else:
         [a, a_s, a_x] = self.__a(s, x, p, derivs=True)
         [g, g_s, g_x, g_a, g_e] = self.__g(s, x, a, e, p, derivs=True)
         G = g
         G_s = g_s + smult(g_a, a_s)
         G_x = g_x + smult(g_a, a_x)
         G_e = g_e
         return [G, G_s, G_x, G_e]
Exemplo n.º 3
0
 def g(self,s,x,e,p,derivs=True):
     if not derivs:
         a = self.__a(s,x,p,derivs=False)[0]
         return self.__g(s,x,a,e,p,derivs=False)
     else:
         [a,a_s,a_x] = self.__a(s,x,p,derivs=True)
         [g,g_s,g_x,g_a,g_e] = self.__g(s,x,a,e,p,derivs=True)
         G = g
         G_s = g_s + smult(g_a,a_s)
         G_x = g_x + smult(g_a,a_x)
         G_e = g_e
         return [G,G_s,G_x,G_e]
Exemplo n.º 4
0
 def f(self, s, x, snext, xnext, e, p, derivs=True):
     if not derivs:
         a = self.__a(s,x,p,derivs=False)[0]
         anext = self.__a(snext,xnext,p,derivs=False)[0]
         return self.__f(s,x,snext,xnext,a,anext,e,p,derivs=False)
     else:
         [a,a_s,a_x] = self.__a(s,x,p,derivs=True)
         [A,A_S,A_X] = self.__a(snext,xnext,p,derivs=True)
         [f,f_s,f_x,f_S,f_X,f_a,f_A] = self.__f(s,x,snext,xnext,a,A,e,p)
         F = f
         F_s = f_s + smult(f_a,a_s)
         F_x = f_x + smult(f_a,a_x)
         F_S = f_S + smult(f_A,A_S)
         F_X = f_X + smult(f_A,A_X)
         return [F,F_s,F_x,F_S,F_X]
Exemplo n.º 5
0
 def f(self, s, x, snext, xnext, e, p, derivs=True):
     if not derivs:
         a = self.__a(s, x, p, derivs=False)[0]
         anext = self.__a(snext, xnext, p, derivs=False)[0]
         return self.__f(s, x, snext, xnext, a, anext, e, p, derivs=False)
     else:
         [a, a_s, a_x] = self.__a(s, x, p, derivs=True)
         [A, A_S, A_X] = self.__a(snext, xnext, p, derivs=True)
         [f, f_s, f_x, f_S, f_X, f_a,
          f_A] = self.__f(s, x, snext, xnext, a, A, e, p)
         F = f
         F_s = f_s + smult(f_a, a_s)
         F_x = f_x + smult(f_a, a_x)
         F_S = f_S + smult(f_A, A_S)
         F_X = f_X + smult(f_A, A_X)
         return [F, F_s, F_x, F_S, F_X]