Thread Previous • Date Previous • Date Next • Thread Next |
Kristian Oelgaard wrote:
On 1 February 2010 22:57, Marie Rognes <meg@xxxxxxxxx> wrote:Kristian Oelgaard wrote:On 1 February 2010 22:32, Marie Rognes <meg@xxxxxxxxx> wrote:Kristian Oelgaard wrote:On 1 February 2010 22:02, Marie Rognes <meg@xxxxxxxxx> wrote:Kristian Oelgaard wrote:On 1 February 2010 21:37, Anders Logg <logg@xxxxxxxxx> wrote:Impressive! :-)It sure is, many things could be handled in a much simpler way if it wasn't for memory and runtime considerations of the optimisations. IfI getaround to implementing the other optimisation strategy, we could makelife simpler in these classes and only let the symbolics stuff work on moderately complex forms.Sorry if I messed something up. I just thought it was better to havesomething working (but suboptimal) than something broken (and optimal;) )Agree, the code looks OK.Is it release time or are we waiting for Kristian to do some magic with evaluate_derivatives for Hdiv/curl?Actually, I'm waiting for Marie to fix this one too :)I'm taking a look, but it is not likely to happen within the next couple of hours.I'm lost in the vectors: What is 'derivatives' and 'values' supposed tobe holding? (Math, please ;)'values' is the argument to evaluate_basis_derivatives that will hold thereturn values (derivatives on the physical cell) from the function. Itis the users responsibility to make sure it has the correct size. 'derivatives' is the derivatives on the reference element, which is computed like it is done inside FIAT (multiplication of coefficients, dmats and basis values of the expansion).Ok. And the values are ordered so that first all derivatives for value dimension 0, then all derivatives for value dimension 1, etc.?Yes. There is a comment at the top of evaluatebasisderivatives.py, but itmight be a good idea to put in the generated code too?Currently only the first two (out of four?) 'derivatives' are mapped forBDM _1on triangle? derivatives[0] = (1.0/detJ)*((J_00*tmp_ref0 + J_01*tmp_ref1)); derivatives[1] = (1.0/detJ)*((J_10*tmp_ref0 + J_11*tmp_ref1));I pushed a fix for this a while back, I was hoping that was the error, butI still get wrong results.Sorry, my bad -- something strange happened. And I guess you have checked the indices a couple of hundred times? How about the famous UFC/FIAT reference element difference?I think I found it, I was mapping values from FIAT incorrectly.
Hurray! *crossing fingers* -- Marie
Stupid, stupid me. I'll just clean things up then Anders can make a release. Kristian-- MarieIt should be like below of course.Kristianbut you use higher indices later: values[row] += transform[row][col]*derivatives[col]; values[num_derivatives + row] += transform[row][col]*(derivatives[num_derivatives + col]); Is this intentional? -- MarieKristian-- MarieI'm having problems with the transformation back to the physical element,at least that's where I think the problem is. On the other hand, whenI'm computing values on the reference element (for the tests) should it reallymatter for these elements? I don't see any transformation in FIAT forHdiv/curl elements. Kristian-- Anders On Mon, Feb 01, 2010 at 08:30:28PM -0000, noreply@xxxxxxxxxxxxx wrote:------------------------------------------------------------ revno: 1369 committer: Marie E. Rognes <meg@xxxxxxxxx> branch nick: ffc timestamp: Mon 2010-02-01 21:27:04 +0100 message: Fixed Garth's optimised quadrature problem. modified: ffc/quadrature/fraction.py=== modified file 'ffc/quadrature/fraction.py' --- ffc/quadrature/fraction.py 2010-01-30 19:50:03 +0000 +++ ffc/quadrature/fraction.py 2010-02-01 20:27:04 +0000 @@ -5,7 +5,7 @@ __copyright__ = "Copyright (C) 2009-2010 Kristian B. Oelgaard" __license__ = "GNU GPL version 3 or any later version" -# Last changed: 2010-01-21 +# Last changed: 2010-02-01 # FFC modules. from ffc.log import error @@ -241,9 +241,14 @@ self = found*remain.""" # Reduce the numerator by the var type. - # Handle case where numerator is a sum. if self.num._prec == 3: - num_found, num_remain = self.num.reduce_vartype(var_type)[0] + foo = self.num.reduce_vartype(var_type) + if len(foo) == 1: + num_found, num_remain = self.num.reduce_vartype(var_type)[0] + else: + # meg: I have only a marginal idea of what I'm doing here! + returncreate_sum([create_fraction(create_product([num_found, num_remain]),self.denom)+ for (num_found, num_remain) infoo]).expand().reduce_vartype(var_type) else:num_found, num_remain = self.num.reduce_vartype(var_type)@@ -259,7 +264,7 @@ denom_found, denom_remain = self.denom.reduce_vartype(var_type) # If we have a Sum in the denominator, all terms must be reduced by - # the same terms to make sense. + # the same terms to make sense else: remain = [] for m in self.denom.vrs: @@ -294,6 +299,7 @@ # TODO: Add more checks to avoid expansion. found = None # There is always a remainder. + remain = create_fraction(num_remain, denom_remain).expand() if num_found: @@ -306,6 +312,7 @@found = create_fraction(create_float(1), denom_found)else: found = () + return (found, remain) # FFC quadrature modules.-----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.9 (GNU/Linux) iEYEARECAAYFAktnO54ACgkQTuwUCDsYZdEMIgCfQj7hbvwXKDVzP72ykidr29E9 3s8An1xmHf6nfXJUbnwkwCeZ7dDq5cO0 =9wkW -----END PGP SIGNATURE----- _______________________________________________ Mailing list: https://launchpad.net/~ffc Post to : ffc@xxxxxxxxxxxxxxxxxxx Unsubscribe : https://launchpad.net/~ffc More help : https://help.launchpad.net/ListHelp------------------------------------------------------------------------_______________________________________________ Mailing list: https://launchpad.net/~ffc Post to : ffc@xxxxxxxxxxxxxxxxxxx Unsubscribe : https://launchpad.net/~ffc More help : https://help.launchpad.net/ListHelp
Thread Previous • Date Previous • Date Next • Thread Next |