1111
1212
1313class DofSource (am .Component ):
14- def __init__ (self , input_names = [], geo_names = [], data_names = [], con_names = []):
14+ def __init__ (self , input_names = [], data_names = [], con_names = []):
1515 super ().__init__ ()
1616
1717 # Geo and data added as data to the component
1818 for name in data_names :
1919 self .add_data (name )
20- for name in geo_names :
21- self .add_data (name )
2220
2321 # Add inputs and constraints
2422 for name in input_names :
@@ -30,23 +28,15 @@ def __init__(self, input_names=[], geo_names=[], data_names=[], con_names=[]):
3028
3129
3230class DegreesOfFreedom :
33- def __init__ (self , mesh , space , kind = "input" ):
31+ def __init__ (self , mesh , space , kind = "input" , name = "src" ):
3432 """
3533 Allocate the degrees of freedom on the mesh
3634 """
3735
3836 self .mesh = mesh
3937 self .space = space
4038 self .kind = kind
41-
42- return
43-
44- def _initialize (self ):
45- """
46- Initialize the degrees of freedom associated with this mesh
47- """
48-
49- # Allocate degrees of freedom for each of the nodes/
39+ self .name = name
5040
5141 return
5242
@@ -56,29 +46,25 @@ def add_source(self, model):
5646
5747 # Create amigo source component with input names and geo names
5848 input_names = []
59- geo_names = []
6049 data_names = []
6150 if self .kind == "input" :
6251 input_names = names
6352 elif self .kind == "data" :
6453 data_names = names
65- elif self .kind == "geo" :
66- geo_names = names
6754
68- dof_src = DofSource (
69- input_names = input_names , geo_names = geo_names , data_names = data_names
70- )
55+ dof_src = DofSource (input_names = input_names , data_names = data_names )
7156
7257 # Add global mesh source component
7358 nnodes = mesh .get_num_nodes ()
74- model .add_component (f"src_{ self .kind } " , nnodes , dof_src )
59+ model .add_component (f"src_{ self .name } " , nnodes , dof_src )
60+ # src_soln, src_data, src_geo
7561
7662 def link_dof (self , model , domain , etype , elem_name ):
7763 names = self .space .get_names ("H1" )
7864 conn = self .mesh .get_conn (domain , etype )
7965 for name in names :
8066 model .link (
81- f"src_{ self .kind } .{ name } " , f"{ elem_name } .{ name } " , src_indices = conn
67+ f"src_{ self .name } .{ name } " , f"{ elem_name } .{ name } " , src_indices = conn
8268 )
8369 return
8470
@@ -246,9 +232,13 @@ def __init__(self, mesh, soln_space, weakform, data_space=[], geo_space=[], ndim
246232
247233 # Initialize Dof's
248234 # Take in the soln space -> removes "H1" input
249- self .soln_dof = DegreesOfFreedom (mesh , self .soln_space , "soln" )
250- self .geo_dof = DegreesOfFreedom (mesh , self .geo_space , "geo" )
251- self .data_dof = DegreesOfFreedom (mesh , self .data_space , "data" )
235+ self .soln_dof = DegreesOfFreedom (
236+ mesh , self .soln_space , kind = "input" , name = "soln"
237+ )
238+ self .geo_dof = DegreesOfFreedom (mesh , self .geo_space , kind = "data" , name = "geo" )
239+ self .data_dof = DegreesOfFreedom (
240+ mesh , self .data_space , kind = "data" , name = "data"
241+ )
252242
253243 return
254244
@@ -311,9 +301,7 @@ def __init__(
311301 ):
312302 super ().__init__ (name = name )
313303
314- # NOTE: soln_basis is a dict of objectes for each input
315304 self .soln_basis = soln_basis
316-
317305 self .data_basis = data_basis
318306 self .geo_basis = geo_basis
319307 self .quadrature = quadrature
@@ -352,22 +340,20 @@ def compute(self, **args):
352340
353341
354342def weakform (soln , data = None , geo = None ):
355- soln_u = soln ["u" ]
356- soln_v = soln ["v" ]
343+ u = soln ["u" ]
344+ v = soln ["v" ]
357345
358- u = soln_u ["u" ]
359346 uvalue = u ["value" ]
360347 ugrad = u ["grad" ]
361348
362- v = soln_v ["v" ]
363349 vvalue = v ["value" ]
364350 vgrad = v ["grad" ]
365351
366352 x = geo ["x" ]["value" ]
367353 y = geo ["y" ]["value" ]
368354
369355 # f = am.sin(x) ** 2 * am.cos(y) ** 2
370- # comp1 = 0.5 * (uvalue**2 + basis.dot_product(ugrad, vgrad , n=2) - 2.0 * uvalue * f)
356+ # comp1 = 0.5 * (uvalue**2 + basis.dot_product(ugrad, ugrad , n=2) - 2.0 * uvalue * f)
371357
372358 alpha = 1.0
373359 pi = 3.14159265358979
@@ -380,23 +366,23 @@ def weakform(soln, data=None, geo=None):
380366 ) * am .sin (pi * y )
381367
382368 comp1 = (
383- basis .dot_product (ugrad , vgrad , n = 2 )
384- + alpha * vvalue * uvalue
369+ basis .dot_product (ugrad , ugrad , n = 2 )
370+ + alpha * uvalue * uvalue
385371 + f1 * uvalue
386- + basis .dot_product (vgrad , ugrad , n = 2 )
387- + alpha * uvalue * vvalue
372+ + basis .dot_product (vgrad , vgrad , n = 2 )
373+ + alpha * vvalue * vvalue
388374 + f2 * vvalue
389375 )
390376 return comp1
391377
392378
393379# Initialize the spaces
394380soln_space = basis .SolutionSpace ({"u" : "H1" , "v" : "H1" })
395- data_space = basis .SolutionSpace ({"x" : "H1" , "y " : "H1" })
381+ data_space = basis .SolutionSpace ({"rho " : "H1" })
396382geo_space = basis .SolutionSpace ({"x" : "H1" , "y" : "H1" })
397383
398- # mesh = Mesh("magnet_order_1.inp")
399- mesh = Mesh ("plate.inp" )
384+ mesh = Mesh ("magnet_order_1.inp" )
385+ # mesh = Mesh("plate.inp")
400386problem = Problem (
401387 mesh ,
402388 soln_space ,
@@ -416,8 +402,8 @@ def weakform(soln, data=None, geo=None):
416402
417403# Set the problem data
418404data = model .get_data_vector ()
419- data ["src .x" ] = mesh .X [:, 0 ]
420- data ["src .y" ] = mesh .X [:, 1 ]
405+ data ["src_geo .x" ] = mesh .X [:, 0 ]
406+ data ["src_geo .y" ] = mesh .X [:, 1 ]
421407
422408# x = problem.create_vector()
423409# mat = problem.create_matrix()
@@ -442,8 +428,8 @@ def weakform(soln, data=None, geo=None):
442428
443429ans .get_array ()[:] = spsolve (csr_mat , g .get_array ())
444430ans_local = ans
445- u = ans_local .get_array ()[model .get_indices ("src .u" )]
446- v = ans_local .get_array ()[model .get_indices ("src .v" )]
431+ u = ans_local .get_array ()[model .get_indices ("src_soln .u" )]
432+ v = ans_local .get_array ()[model .get_indices ("src_soln .v" )]
447433print (u )
448434print (v )
449435
0 commit comments