Changeset 578 for trunk/GSASIIstruct.py


Ignore:
Timestamp:
Apr 27, 2012 12:14:21 PM (12 years ago)
Author:
vondreele
Message:

fix "hard" Hessian singular matrix problems - now deletes parameters
fix Pawley overlap reflection constraint problem

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASIIstruct.py

    r577 r578  
    488488    if SGLaue in ['-1','2/m','mmm']:
    489489        return                      #no Pawley symmetry required constraints
     490    eqvDict = {}
    490491    for i,varyI in enumerate(pawleyVary):
     492        eqvDict[varyI] = []
    491493        refI = int(varyI.split(':')[-1])
    492494        ih,ik,il = PawleyRef[refI][:3]
    493         for varyJ in pawleyVary[0:i]:
     495        for varyJ in pawleyVary[i+1:]:
    494496            refJ = int(varyJ.split(':')[-1])
    495497            jh,jk,jl = PawleyRef[refJ][:3]
     
    498500                jsum = jh**2+jk**2
    499501                if abs(il) == abs(jl) and isum == jsum:
    500                     G2mv.StoreEquivalence(varyJ,(varyI,))
     502                    eqvDict[varyI].append(varyJ)
    501503            elif SGLaue in ['3R','3mR']:
    502504                isum = ih**2+ik**2+il**2
     
    505507                jsum2 = jh*jk+jh*jl+jk*jl
    506508                if isum == jsum and isum2 == jsum2:
    507                     G2mv.StoreEquivalence(varyJ,(varyI,))
     509                    eqvDict[varyI].append(varyJ)
    508510            elif SGLaue in ['3','3m1','31m','6/m','6/mmm']:
    509511                isum = ih**2+ik**2+ih*ik
    510512                jsum = jh**2+jk**2+jh*jk
    511513                if abs(il) == abs(jl) and isum == jsum:
    512                     G2mv.StoreEquivalence(varyJ,(varyI,))
     514                    eqvDict[varyI].append(varyJ)
    513515            elif SGLaue in ['m3','m3m']:
    514516                isum = ih**2+ik**2+il**2
    515517                jsum = jh**2+jk**2+jl**2
    516518                if isum == jsum:
    517                     G2mv.StoreEquivalence(varyJ,(varyI,))
     519                    eqvDict[varyI].append(varyJ)
     520    for item in pawleyVary:
     521        if eqvDict[item]:
     522            for item2 in pawleyVary:
     523                if item2 in eqvDict[item]:
     524                    eqvDict[item2] = []
     525            G2mv.StoreEquivalence(item,eqvDict[item])
    518526                   
    519527def cellVary(pfx,SGData):
     
    28982906    #     print msg
    28992907    #     raise Exception(' *** Refine aborted ***')
    2900     print G2mv.VarRemapShow(varyList)
     2908    #print G2mv.VarRemapShow(varyList)
    29012909    G2mv.Map2Dict(parmDict,varyList)
    29022910    Rvals = {}
     
    29472955            print '**** Refinement failed - singular matrix ****'
    29482956            if 'Hessian' in Controls['deriv type']:
    2949                 for i in result[2]['psing'].reverse():
    2950                         print 'Removing parameter: ',varyList[i]
    2951                         del(varyList[i])                   
     2957                num = len(varyList)-1
     2958                for i,val in enumerate(np.flipud(result[2]['psing'])):
     2959                    if val:
     2960                        print 'Removing parameter: ',varyList[num-i]
     2961                        del(varyList[num-i])                   
    29522962            else:
    29532963                Ipvt = result[2]['ipvt']
     
    31293139                print '**** Refinement failed - singular matrix ****'
    31303140                if 'Hessian' in Controls['deriv type']:
    3131                     for i in result[2]['psing'].reverse():
    3132                             print 'Removing parameter: ',varyList[i]
    3133                             del(varyList[i])                   
     3141                    num = len(varyList)-1
     3142                    for i,val in enumerate(np.flipud(result[2]['psing'])):
     3143                        if val:
     3144                            print 'Removing parameter: ',varyList[num-i]
     3145                            del(varyList[num-i])                   
    31343146                else:
    31353147                    Ipvt = result[2]['ipvt']
Note: See TracChangeset for help on using the changeset viewer.