@@ -371,7 +371,7 @@ def warping_analysis(progress=None):
371371 ),
372372 total = len (warping_section .elements ),
373373 )
374- (k , k_lg , f_torsion ) = warping_section .assemble_torsion (
374+ (k_lg , f_torsion ) = warping_section .assemble_torsion (
375375 progress = progress , task = task
376376 )
377377
@@ -383,7 +383,7 @@ def warping_analysis(progress=None):
383383 )
384384 progress .update (0 , advance = 1 )
385385 else :
386- (k , k_lg , f_torsion ) = warping_section .assemble_torsion ()
386+ (k_lg , f_torsion ) = warping_section .assemble_torsion ()
387387
388388 # ILU decomposition of stiffness matrices
389389 def ilu_decomp (progress = None , task = None ):
@@ -424,9 +424,9 @@ def ilu_decomp(progress=None, task=None):
424424 # solve for warping function
425425 def solve_warping ():
426426 if solver_type == "cgs" :
427- omega = solver .solve_cgs ( k , f_torsion , k_precond )
427+ omega = solver .solve_cgs_lagrange ( k_lg , f_torsion , m = k_lg_precond )
428428 elif solver_type == "direct" :
429- omega = solver .solve_direct ( k , f_torsion )
429+ omega = solver .solve_direct_lagrange ( k_lg , f_torsion )
430430
431431 return omega
432432
@@ -457,7 +457,7 @@ def solve_warping():
457457 self .section_props .j = (
458458 self .section_props .ixx_c
459459 + self .section_props .iyy_c
460- - omega .dot (k .dot (np .transpose (omega )))
460+ - omega .dot (k_lg [: - 1 , : - 1 ] .dot (np .transpose (omega )))
461461 )
462462
463463 # assemble shear function load vectors
@@ -929,25 +929,25 @@ def calculate_frame_properties(self, solver_type="direct"):
929929 el .coords [0 , :] -= self .section_props .cx
930930 el .coords [1 , :] -= self .section_props .cy
931931
932- (k , _ , f ) = warping_section .assemble_torsion (lg = False )
932+ (k_lg , f ) = warping_section .assemble_torsion ()
933933
934934 # if the cgs method is used, perform ILU decomposition
935935 if solver_type == "cgs" :
936- k_precond = linalg .LinearOperator (
937- (self .num_nodes , self .num_nodes ), linalg .spilu (k ).solve
936+ k_lg_precond = linalg .LinearOperator (
937+ (self .num_nodes + 1 , self .num_nodes + 1 ), linalg .spilu (k_lg ).solve
938938 )
939939
940940 # solve for warping function
941941 if solver_type == "cgs" :
942- omega = solver .solve_cgs ( k , f , k_precond )
942+ omega = solver .solve_cgs_lagrange ( k_lg , f , m = k_lg_precond )
943943 elif solver_type == "direct" :
944- omega = solver .solve_direct ( k , f )
944+ omega = solver .solve_direct_lagrange ( k_lg , f )
945945
946946 # calculate the torsion constant
947947 self .section_props .j = (
948948 self .section_props .ixx_c
949949 + self .section_props .iyy_c
950- - omega .dot (k .dot (np .transpose (omega )))
950+ - omega .dot (k_lg [: - 1 , : - 1 ] .dot (np .transpose (omega )))
951951 )
952952
953953 return (
@@ -1223,18 +1223,15 @@ def calc_stress(progress=None):
12231223 # return the stress_post object
12241224 return stress_post
12251225
1226- def assemble_torsion (self , lg = True , progress = None , task = None ):
1227- """Assembles stiffness matrices to be used for the computation of warping properties and
1228- the torsion load vector (f_torsion). Both a regular (k) and Lagrangian multiplier (k_lg)
1229- stiffness matrix are returned. The stiffness matrices are assembled using the sparse COO
1230- format and returned in the sparse CSC format.
1226+ def assemble_torsion (self , progress = None , task = None ):
1227+ """Assembles stiffness matrices to be used for the computation of warping
1228+ properties and the torsion load vector (f_torsion). A Lagrangian multiplier
1229+ (k_lg) stiffness matrix is returned. The stiffness matrix are assembled using
1230+ the sparse COO format and returned in the sparse CSC format.
12311231
1232- :param bool lg: Whether or not to calculate the Lagrangian multiplier stiffness matrix
1233-
1234- :return: Regular stiffness matrix, Lagrangian multiplier stiffness matrix and torsion load
1235- vector *(k, k_lg, f_torsion)*
1236- :rtype: tuple(:class:`scipy.sparse.csc_matrix`, :class:`scipy.sparse.csc_matrix`,
1237- :class:`numpy.ndarray`)
1232+ :return: Lagrangian multiplier stiffness matrix and torsion load
1233+ vector *(k_lg, f_torsion)*
1234+ :rtype: tuple(:class:`scipy.sparse.csc_matrix`, :class:`numpy.ndarray`)
12381235 """
12391236
12401237 # initialise variables
@@ -1272,11 +1269,6 @@ def assemble_torsion(self, lg=True, progress=None, task=None):
12721269 if progress is not None :
12731270 progress .update (task , advance = 1 )
12741271
1275- k = coo_matrix ((data , (row , col )), shape = (N , N ))
1276-
1277- if not lg :
1278- return (csc_matrix (k ), None , f_torsion )
1279-
12801272 # construct Lagrangian multiplier matrix:
12811273 # column vector of ones
12821274 row = np .hstack ((row , range (N )))
@@ -1295,7 +1287,7 @@ def assemble_torsion(self, lg=True, progress=None, task=None):
12951287
12961288 k_lg = coo_matrix ((data , (row , col )), shape = (N + 1 , N + 1 ))
12971289
1298- return (csc_matrix (k ), csc_matrix ( k_lg ), f_torsion )
1290+ return (csc_matrix (k_lg ), f_torsion )
12991291
13001292 def plot_mesh (
13011293 self ,
0 commit comments